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

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

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

I. Handler:

在進(jìn)程存活的期間有效使用, Google官方推薦使用。

簡(jiǎn)單易用。

穩(wěn)定高效。

II. AlarmManager:

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

1. 功能

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

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

2. 特征

注冊(cè)以后,無(wú)論是自己的應(yīng)用進(jìn)程是否存在/組件是否存在,都會(huì)正常執(zhí)行。

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

AlarmManager處理的是一個(gè)PendingIntent,因此通常是啟動(dòng)一個(gè)服務(wù),進(jìn)行處理事務(wù)。

3. 備注

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

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

III. Job Scheduler:

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

1. 優(yōu)勢(shì)

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

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

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

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

3. 接口類型

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

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

IV. GCM

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

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

1. 接口類型

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

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

觸發(fā)場(chǎng)景與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. 用戶可以通過(guò)設(shè)置中主動(dòng)查看同步的時(shí)間,以及觸發(fā)同步,或者關(guān)閉同步。
  5. API 7 或以上。

2. 備注

可綁定一個(gè)賬戶。

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

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

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

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

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

手機(jī)閑置時(shí)。

一天。

如果同步失敗,會(huì)放到同步失敗的隊(duì)列中,在盡可能的時(shí)候進(jìn)行同步。

VI. Doze Mode

Deep Doze Mode

API 23中直接稱其為Doze Mode。

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

1. 特征

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

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

通過(guò)移動(dòng)窗口打包任務(wù)請(qǐng)求,并且間隔時(shí)間會(huì)越來(lái)越久。

2. 進(jìn)入條件

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

手機(jī)沒(méi)有在充電

屏幕被關(guān)閉

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

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

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

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

Light Doze Mode

API 24 或以上會(huì)啟用該模式

1. 特征

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

2. 進(jìn)入條件

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

手機(jī)沒(méi)有在充電

屏幕被關(guān)閉

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

或者在以下的條件:

處于Deep Doze Mode

屏幕關(guān)閉

手機(jī)沒(méi)有在充電

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

3. 退出條件

屏幕打開(kāi)

手機(jī)開(kāi)始充電

進(jìn)入Deep Doze Mode

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

對(duì)所有應(yīng)用拒絕網(wǎng)絡(luò)訪問(wèn)。

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

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

中斷/避開(kāi)Doze

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

1. AlarmManager

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

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

2. FCM/GCM

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

3. 白名單

白名單官方文檔

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

主動(dòng)請(qǐng)求加入白名單,用戶同一以后加入白名單;

用戶也可以主動(dòng)將App從白名單中刪除或添加應(yīng)用;

應(yīng)用可以通過(guò)isIgnoringBatteryOptimizations()來(lái)獲知是否在白名單中;

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

名單的請(qǐng)求方式:

通過(guò)ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS打開(kāi)電量?jī)?yōu)化頁(yè)面,用戶可以通過(guò)搜索來(lái)關(guān)閉應(yīng)用的電量?jī)?yōu)化,以此加入白名單。

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

4. 特殊情況

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

Doze模式測(cè)試

Google官方提供了一些adb命令用于測(cè)試Doze模式,而非需要通過(guò)等待來(lái)進(jìn)入Doze模式的。

1. 進(jìn)入Doze模式

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

將其連接連接到電腦。

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

通過(guò) adb shell dumpsys deviceidle step [light|deep] 強(qiáng)行進(jìn)入Doze模式。

退出Doze模式,讓手機(jī)恢復(fù)正常需要復(fù)位充電模式: 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/

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

相關(guān)文章

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

    android時(shí)間選擇控件之TimePickerView使用方法詳解

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

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

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

    Android 文件操作方法

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

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

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

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

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

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

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

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

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

    鴻蒙開(kāi)源第三方組件之連續(xù)滾動(dòng)圖像組件功能

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

    Android Handler消息傳遞機(jī)制

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

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

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

最新評(píng)論