1. 程式人生 > >[譯]圖解Android應用的後臺任務和提醒

[譯]圖解Android應用的後臺任務和提醒

對於很多應用而言,構建後臺任務是重要的一環。其中一種方式是:使用AlarmManager註冊定時器喚醒未在前臺啟動的應用(例如鬧鐘,譯者注)。如何優雅低使用定時器類和API,它們是不是你的最佳選擇?下面讓我們看看如何抉擇。
喚醒頻率?

對於少於60秒的喚醒,定時器類並不是最優解:使用更高效的的Handler來處理頻發的任務。
希望使用者看到計時?

對於API21+(Android5.0以上,譯者注),新API允許使用setAlarmClock()方法來設定一個可見的定時器:系統UI通過getNextAlarmClock()更新時間和圖示。注意setAlarmClock()可以在裝置/應用休眠時生效(類似於setExactAndAllowWhileIdle()):更形象的描述是類似來電喚醒。為了向後相容,你可以繼續往下看。
休眠喚醒(例如,待機應用)?

在Android 6.0+(API 23),休眠模式下新增了休眠模式(在完全靜止,不充電,閒置時啟動)和應用待機模式(不充電,未使用一段時間)。偷懶可以呼叫setAndAllowWhileIdle()或者精準呼叫setExactAndAllowWhileIdle()來喚醒上述空閒狀態。為了完全符合Android標準和節省電量,使用標準的set()和setExact()方法等到使用者開啟你的應用後再提醒。

(我們已後會繼續深入討論休眠模式和應用待機模式!)
只是喚醒?

單個定時器可以恰當地使用set()方法設定,需要注意的是,這個方法並不準確,當目標##Android API**版本大於或等於19,可能與批量定時器一樣——在到達結束時間點前,計時器並不會休眠,但時間結束後進入休眠。如果對於開始時間比較寬鬆,結束時間比較嚴格,考慮使用setWindow()加強對準確時間段的控制。

在Android API 19+使用setExact()設定精確的定時器,只有在需要精準時刻的時候使用(例如日曆提醒器)
需要以固定頻率重複?

對於反覆定時器,批量是一個好的省電策略。
setInexactRepeating()正是實現的好方法。API 19以前,可以使用常量INTERVAL_(例如,INTERVAL_HOUR實現批量固定間隔的定時器)。對於API 19+的裝置,所有重複的定時器(無論是否設定了INTERVAL_),只要設定**setInexactRepeating()都會成為批量定時器。

如果細心觀察,會發現setRepeating()——類似set(),從API 19開始,就成為不精確的重複。也就是說,在大於等於API 19的裝置上,setRepeating()會呼叫setInexactRepeating()。如果真的需要精確,使用setExact(),在喚醒成功之後再次設定定時器。記得考慮電量情況!
等一等,真的需要定時?

如果真的想省電,在API 21+考慮使用JobScheduler,或者在Android API9而且Google Service全開時使用GcmNetworkManager(嗯,天朝自動忽略,譯者注)

上述API支援單個和週期任務,缺少了喚醒沉睡裝置的能力,但有能力等待網路接通,電池充電,利用自動退出和重試,重啟機制和系統批量任務(意味著省電)。

有各種好理由說服你使用JobScheduler和GcmNetworkManager,點這裡構建更好的應用

相關推薦

[]圖解Android應用後臺任務提醒

對於很多應用而言,構建後臺任務是重要的一環。其中一種方式是:使用AlarmManager註冊定時器喚醒未在前臺啟動的應用(例如鬧鐘,譯者注)。如何優雅低使用定時器類和API,它們是不是你的最佳選擇?下面讓我們看看如何抉擇。 喚醒頻率? 對於少於60秒的喚

Android總結 - Activity任務返回棧、儲存Activity的狀態

任務和返回棧   一個應用程式當中通常都會包含很多個Activity,每個Activity都應該設計成為一個具有特定的功能,並且可以讓使用者進行操作的元件。另外,Activity之間還應該是可以相互啟動的。比如,一個郵件應用中可能會包含一個用於展示郵件列表的Activity,而當用戶點選了其中某

圖解 Android 事件分發機制 handler 機制

在Android開發中,事件分發機制是一塊Android比較重要的知識體系,瞭解並熟悉整套的分發機制有助於更好的分析各種點選滑動失效問題,更好去擴充套件控制元件的事件功能和開發自定義控制元件,同時事件分發機制也是Android面試必問考點之一,如果你能把下面的一些事件分發圖當場畫出來肯定加分不少。廢

Android應用的uidpid

大家在用開發工具連線手機時一定見過下圖的程序編號:     PID和UID存在的意義         Pid是程序ID,Uid是使用者ID,只是Android和計算機不一樣,計算機每個使用者都具有一個Uid,哪個使用者start的程式,這個程式的Uid 就是那個使用者

Android應用截圖SurfaceView截圖問題總結

                最近在做android截圖應用的過程遇到很多問題,接觸了好些截圖方法,但是還是不能實現SufaceView截圖功能。今天就把我嘗試過的方法總結下,希望把我慘痛的經歷寫出來後能夠幫助到要做此功能的朋友少走彎路,或者是給一些思路吧。如果哪位大俠能夠做到SurfaceView截圖,還

定時AlarmManager迴圈執行後臺任務多個定時迴圈後臺任務寫在一起

定時迴圈執行某些任務,在開發中是很常見的一種方式,Android中有兩種定時器可以實現,一種是Alarm,另一種是AlarmManager,Alarm在Android4.4以後,這種方式的定時器不太準確,Android官方為了優化手機電池使用時間,將多個差不多時

Android 應用的安裝解除安裝

1.普通的應用安裝和解除安裝 /* 安裝apk */ public static void installApk(Context context, String fileName) {

Android基礎篇(二)——Android應用結構分析清單檔案

一、Android應用目錄結構簡單介紹 在Android Studio上開發Android應用簡單方便,除了建立Android專案,開發者只需做兩件事情:1.使用activiy_main.xml檔案定

Android應用安全防護逆向分析-----作者

在之前的一片文章中,我們介紹了陣列操作物件的時候引用問題以及自動釋放池的概念:今天我們繼續來看一下引用計數中一個痛疼的問題:迴圈引用關於迴圈引用的問題,這裡就不做太多解釋了,就是多個物件之間相互引用,形成環狀。來看一個具體的例子:Dog類和Person類之間相互引用Dog.h

【 專欄 】- Android應用安全防護逆向分析學習筆記

Android應用安全防護和逆向分析學習筆記 這裡給大家分享的是《Android應用安全防護和逆向分析》的學習筆記,個人認為移動端的安全也是不可忽視的,我們Android工程師應該重視Android的安全這一塊,希望這個專欄的部落

Android應用新增(建立)刪除及判斷是否存在桌面快捷方式

Android桌面程式提供了應用新增和刪除桌面快捷方式的功能以及判斷快捷方式是否存在,只要傳入快捷方式標題、圖示及點選快捷方式執行的應用Intent即可。程式碼如下: /** * 為當前應用新增桌面快捷方式 * * @param cx * @param appNa

Android 仿 窗簾效果 登錄界面拖動效果 (Scroller類的應用) 附 2個DEMO及源代碼

@override 宋體 off down != 過程 事件 學習 border 在android學習中,動作交互是軟件中重要的一部分。當中的Scroller就是提供了拖動效果的類,在網上。比方說一些Launcher實現滑屏都能夠通過這個類去實現。以下要說的

linux後臺運行關閉、查看後臺任務

ctrl+z ctrl+c .com nat 執行 opp 後臺進程 查看 用戶 fg、bg、jobs、&、nohup、ctrl+z、ctrl+c 命令 一、& 加在一個命令的最後,可以把這個命令放到後臺執行,如 watch -n 10 sh

手把手教你_怎麽找android應用的包名啟動activity

color don dsm too key 包名 ani 一個 col 自己主動化測試中常常遇到這個問題,關於這個題目,方法眾多,咱的目的是找個比較簡單靠譜的: 方法一: 先進入cmd窗體,adb shell 後: cd /data/d

利用python制作在Linux服務器後臺定時運行的任務-郵件提醒

後臺進程 user rep 重復 什麽 pri nlog .exe 服務器 1. 自動任務的功能為: 定時掃描數據庫中的記錄,然後發郵件 代碼如下 scheduleMail.py import pymysql import smtplib from

詳解linux後臺運行關閉、查看後臺任務

輸入 列表 顯示 color pre opp ima 監聽 kill -9 一、& 加在一個命令的最後,可以把這個命令放到後臺執行,如 watch -n 10 sh test.sh & #每10s在後臺執行一次test.sh腳本 二、ctrl + z

android studio使用CMakeNDK,實現應用自身被卸載時打開某一網址

licensed 項目 右鍵 ava 開發工具 not per 2.0 idt 實現應用自身被卸載時打開某一網址的c代碼 MyActivity: public class MyActivity extends Activity { /** * Calle

linux===linux後臺運行關閉、查看後臺任務(轉)

我們 top 實現 目錄 這樣的 作業 net 超級 運行命令 fg、bg、jobs、&、ctrl + z都是跟系統任務有關的,雖然現在基本上不怎麽需要用到這些命令,但學會了也是很實用的 一。& 最經常被用到這個用在一個命令的最後,可以把這個命令放到後臺執

Android應用開發按下返回鍵退向後臺執行

processor itl and task 微博 tracking blog 返回 class 轉載請註明來源:http://blog.csdn.net/kj

Delphi XE5 圖解Android應用制作簽名

icon har 設置 font option tor creat lan class http://redboy136.blog.163.com/blog/static/107188432201381872820132 Delphi XE5 圖解為Android應用制