欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android 后臺調(diào)度任務(wù)與省電詳解

 更新時間:2016年08月26日 11:37:13   作者:Jacks Blog  
本文主要介紹 Android 后臺調(diào)度任務(wù)與省電,這里整理了詳細的知識資料供大家學習參考,希望能幫助有需要的小伙伴

I. Handler:

在進程存活的期間有效使用, Google官方推薦使用。

簡單易用。

穩(wěn)定高效。

II. AlarmManager:

利用系統(tǒng)層級的鬧鐘服務(wù)(持有Wake lock)。
如果需要精確的定時任務(wù),這個是最佳選擇。

1. 功能

在大概的時間間隔 運行/重復執(zhí)行 指定任務(wù)。

指定精確的時間間隔執(zhí)行任務(wù)。

2. 特征

注冊以后,無論是自己的應用進程是否存在/組件是否存在,都會正常執(zhí)行。

所有注冊的鬧鐘服務(wù)都會在系統(tǒng)重啟后復位,因此如果需要保證任務(wù),就需要注冊RECEIVE_BOOT_COMPLETE,保證重啟后,可以重新將任務(wù)注冊到鬧鐘服務(wù)中。

AlarmManager處理的是一個PendingIntent,因此通常是啟動一個服務(wù),進行處理事務(wù)。

3. 備注

官方不建議網(wǎng)絡(luò)請求相關(guān)的使用AlarmManager。

考慮到電量損耗,建議非特殊情況使用 大概時間的方式,這樣Android會盡量讓幾個任務(wù)打包在一起執(zhí)行,防止頻繁的喚起手機。

III. Job Scheduler:

  1. JobScheduler官方文檔
  2. 建議網(wǎng)絡(luò)相關(guān)任務(wù)放到Job Scheduler。
  3. 系統(tǒng)重啟以后,任務(wù)會依然保留在Job Scheduler當中。
  4. 只有在Api21或以上的系統(tǒng)支持

1. 優(yōu)勢

  1. 更節(jié)省電量
  2. 更高效
  3. 更易用

2. 明確的指定特定場景下執(zhí)行(JobInfo):

由于是將多個任務(wù)打包在一個場景下執(zhí)行,因此執(zhí)行有略微的延后;并且有期限,如果在期限內(nèi)還沒有滿足特定情況,系統(tǒng)會將這些任務(wù)加入隊列,并且隨后會進行執(zhí)行。

  1. 設(shè)備開始充電
  2. 空閑
  3. 連接上網(wǎng)絡(luò)
  4. 斷開網(wǎng)絡(luò)

3. 接口類型

boolean onStartJob(JobParams params) {
  // 開始執(zhí)行
  // 注意這個方法是在主線程執(zhí)行的,如果是耗時操作請拋到獨立線程中
  // jobFinished(JobParameters params) // 在完成任務(wù)并且決定是否還需要定時執(zhí)行更多任務(wù)
  // return 是否是在獨立現(xiàn)在還有事務(wù)要執(zhí)行
}

void onStopJob(){
  // 用于清理數(shù)據(jù),在結(jié)束任務(wù)后被回調(diào)。
}

IV. GCM

GCM Netwrok Manager實際上在 Api 21 或以上也是使用了 Job Scheduler,在此之前的版本使用的是Google Play Service中實

現(xiàn)Job Scheduler的功能。
在GCMNetworkManager中有很多利于省點的規(guī)則。

1. 接口類型

通過 OneoffTask.Builder()與PeriodicTask.Builder()創(chuàng)建任務(wù)。

GcmTaskService#onRunTask(TaskParams params)是在后臺線程執(zhí)行的。

觸發(fā)場景與JobInfo中的一樣。

V. Sync Adapter

Transferring Data Using Sync Adapters

通常是用于同步較多的數(shù)據(jù)。

也許這是Job Scheduler API 21前比較好的替代品。

同步服務(wù)端與本地設(shè)備中的數(shù)據(jù)。

1. 特征

  1. 利于大數(shù)據(jù)同步。
  2. 不需要依賴Google Play Service。
  3. 省電穩(wěn)定。
  4. 用戶可以通過設(shè)置中主動查看同步的時間,以及觸發(fā)同步,或者關(guān)閉同步。
  5. API 7 或以上。

2. 備注

可綁定一個賬戶。

通過提供ContentProvider,并且與服務(wù)端同步的數(shù)據(jù)庫。

只有在存在網(wǎng)絡(luò)的時候才觸發(fā)同步。

2. 在一定的場景下觸發(fā)同步

盡可能的打包所有需要同步的任務(wù)在一個周期中執(zhí)行,以此來進行盡可能的節(jié)省手機電量。

服務(wù)端/設(shè)備端數(shù)據(jù)發(fā)生變化。

手機閑置時。

一天。

如果同步失敗,會放到同步失敗的隊列中,在盡可能的時候進行同步。

VI. Doze Mode

Deep Doze Mode

API 23中直接稱其為Doze Mode。

無論Target SDK是多少,只要設(shè)備是Android API 23或以上會啟用該模式。

1. 特征

旨在: 在用戶離開設(shè)備以后,盡可能的減少手機電量的消耗。

開發(fā)人員并不需要做特殊的適配,但是會對上面提到的所有Schedule的方式(Job Scheduler、AlarmManager、Syncs Adapter)進行影響。

通過移動窗口打包任務(wù)請求,并且間隔時間會越來越久。

2. 進入條件

會同時滿足以下情況過后一段時間(大約30分鐘)以后生效:

手機沒有在充電

屏幕被關(guān)閉

手機各方狀態(tài)保持穩(wěn)定

退出條件是,進入條件中任意條件狀態(tài)發(fā)生變化。

3. 在兩個處理窗口之間的手機狀態(tài)

  1. 對所有應用拒絕網(wǎng)絡(luò)訪問。
  2. 所有JobScheduler、Sync-Adapter、AlarmManager的任務(wù)都會被延后到窗口中執(zhí)行。
  3. 系統(tǒng)會拒絕所有來自應用的WAKE-LOCK
  4. 停止所有Wifi以及GPS掃描
  5. 減少位置事件從設(shè)備檢測WiFi熱點。

Light Doze Mode

API 24 或以上會啟用該模式

1. 特征

相比Deep Doze Mode,打包任務(wù)的頻率會更高些

2. 進入條件

會同事滿足以下情況后一段時間(大約幾分鐘)以后生效:

手機沒有在充電

屏幕被關(guān)閉

處于穩(wěn)定狀態(tài)/不穩(wěn)定狀態(tài)

或者在以下的條件:

處于Deep Doze Mode

屏幕關(guān)閉

手機沒有在充電

手機不再處于穩(wěn)定狀態(tài)

3. 退出條件

屏幕打開

手機開始充電

進入Deep Doze Mode

4. 在兩個處理窗口之間的手機狀態(tài)

對所有應用拒絕網(wǎng)絡(luò)訪問。

所有JobScheduler與Sync-Adapter的任務(wù)都會被延后到窗口中執(zhí)行。

不會對AlarmManager中的任務(wù)進行影響,但是將無網(wǎng)絡(luò)訪問(如果你的任務(wù)需要網(wǎng)絡(luò)訪問,是時候改用JobScheduler或Sync-Adapter,保證在任務(wù)窗口執(zhí)行會有網(wǎng)絡(luò))

中斷/避開Doze

以下所有情況,Google官方都建議不在特殊情景,不要去使用,由于中斷了省電的規(guī)則。

1. AlarmManager

指定需要精確時間的事件: setAndAllowWhileIdle()、setExactAndAllowWhileIdle()。但是在非窗口期間并不解除無網(wǎng)絡(luò)訪問的限制,并且只有10s的時間給予處理。

指定鬧鐘事件AlarmManager.setAlarmClock()的事件會在鬧鐘結(jié)束前,令系統(tǒng)短暫的完全退出Doze模式,并且正常處理事件,系統(tǒng)為了突顯該鬧鐘事件,將會在status bar上顯示物理鬧鐘的icon。

2. FCM/GCM

(Firebase Cloud Messaging,舊版中稱為Google Cloud Messaging(GCM))。
FCM/GCM中高優(yōu)先級的任務(wù)配置中("priority" : "high") 的消息,在Doze模式下可以正常及時到達。

3. 白名單

白名單官方文檔

官方建議可考慮加入白名單的情況

主動請求加入白名單,用戶同一以后加入白名單;

用戶也可以主動將App從白名單中刪除或添加應用;

應用可以通過isIgnoringBatteryOptimizations()來獲知是否在白名單中;

白名單的應用可以訪問網(wǎng)絡(luò)與持有有效的WAKELOKE,但是其他Doze的約束依然存在(如延后的Job Scheduler、Syncs-Adapter、AlarmManager);

名單的請求方式:

通過ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS打開電量優(yōu)化頁面,用戶可以通過搜索來關(guān)閉應用的電量優(yōu)化,以此加入白名單。

先持有REQUEST_IGNORE_BATTERY_OPTIMIZATIONS權(quán)限,然后通過啟動IntentACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS直接彈出Dialog讓用戶關(guān)閉應用的電量優(yōu)化,以此加入白名單。

4. 特殊情況

前臺服務(wù)(foreground-service)將不會受到Doze模式影響。

Doze模式測試

Google官方提供了一些adb命令用于測試Doze模式,而非需要通過等待來進入Doze模式的。

1. 進入Doze模式

準備一臺系統(tǒng)是在Android Nougat Devloper Preview4或以上版本的設(shè)備。

將其連接連接到電腦。

通過 adb shell dumpsys battery unplug 命令讓設(shè)備進入未連接充電的模式。

通過 adb shell dumpsys deviceidle step [light|deep] 強行進入Doze模式。

退出Doze模式,讓手機恢復正常需要復位充電模式: adb shell dumpsys battery reset。

2. 其他指令

獲取設(shè)備狀態(tài) adb shell dumpsys deviceidle get [light|deep|force|screen|charging|network]。

在Android Nougat Developer Preview 4中,Doze模式的狀態(tài)周期是:

Light: ACTIVE -> IDLE -> IDLE_MAINTENANCE -> OVERRIDE
Deep: ACTIVE -> IDLE_PENDING -> SENSING -> LOCATING -> IDLE -> IDLE_MAINTENANCE

Choosing the Right Background Scheduler in Android

Diving into Doze Mode for Developers

© 2012 – 2016, Jacksgong(blog.dreamtobe.cn). Licensed under the Creative Commons Attribution-NonCommercial 3.0 license (This license lets others remix, tweak, and build upon a work non-commercially, and although their new works must also acknowledge the original author and be non-commercial, they don't have to license their derivative works on the same terms). http://creativecommons.org/licenses/by-nc/3.0/

以上就是對Android 后臺調(diào)度任務(wù)與省電的資料,有開發(fā)Android 應用的朋友可以參考下,謝謝大家對本站的支持!

相關(guān)文章

  • android時間選擇控件之TimePickerView使用方法詳解

    android時間選擇控件之TimePickerView使用方法詳解

    這篇文章主要為大家詳細介紹了android時間選擇控件之TimePickerView的使用方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Android程序鎖的實現(xiàn)以及邏輯

    Android程序鎖的實現(xiàn)以及邏輯

    本篇文章主要是介紹Android程序鎖的實現(xiàn)以及邏輯,它的目的是可以給程序加鎖,上過鎖的程序可以解鎖,有興趣的朋友可以了解一下。
    2016-10-10
  • Android 文件操作方法

    Android 文件操作方法

    本篇文章小編為大家介紹,Android 文件操作方法。需要的朋友參考下
    2013-04-04
  • Android實現(xiàn)從緩存中讀取圖片與異步加載功能類

    Android實現(xiàn)從緩存中讀取圖片與異步加載功能類

    這篇文章主要介紹了Android實現(xiàn)從緩存中讀取圖片與異步加載功能類,涉及Android針對緩存的操作及圖片異步加載相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2016-08-08
  • 解決PhoneGap不支持viewport的幾種方法

    解決PhoneGap不支持viewport的幾種方法

    今天小編就為大家分享一篇關(guān)于解決PhoneGap不支持viewport的幾種方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • Android系統(tǒng)添加Linux驅(qū)動

    Android系統(tǒng)添加Linux驅(qū)動

    今天小編就為大家分享一篇關(guān)于Android系統(tǒng)添加Linux驅(qū)動的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-10-10
  • Android開發(fā)實現(xiàn)拍照功能的方法實例解析

    Android開發(fā)實現(xiàn)拍照功能的方法實例解析

    這篇文章主要介紹了Android開發(fā)實現(xiàn)拍照功能的方法,結(jié)合實例形式較為詳細的分析了Android拍照功能的具體實現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下
    2017-10-10
  • 鴻蒙開源第三方組件之連續(xù)滾動圖像組件功能

    鴻蒙開源第三方組件之連續(xù)滾動圖像組件功能

    這篇文章主要介紹了鴻蒙開源第三方組件之連續(xù)滾動圖像組件功能,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Android Handler消息傳遞機制

    Android Handler消息傳遞機制

    Handler是一套 Android 消息傳遞機制,主要用于線程間通信。用最簡單的話描述: handler其實就是主線程在起了一個子線程,子線程運行并生成Message,Looper獲取message并傳遞給Handler,Handler逐個獲取子線程中的Message
    2022-12-12
  • 淺談關(guān)于Android路由的實現(xiàn)

    淺談關(guān)于Android路由的實現(xiàn)

    本篇文章主要介紹了淺談關(guān)于Android路由的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10

最新評論