後台任務及省電優化

2021-09-26 10:38:08 字數 2252 閱讀 1532

三、android不同版本對省電的優化

四、針對省電優化的解決方案

附:參考

關於 android 程序保活,你所需要知道的一切

但是,官方說明自己看:

doze會通過推遲應用程式的後台cpu和網路活動來減少電池消耗。

系統會定期退出doze一段時間,讓應用程式完成延期活動。在此維護視窗期間,系統將執行所有掛起的同步,作業和警報,並允許應用程式訪問網路。

在每個維護視窗結束時,系統再次進入doze,暫停網路訪問並推遲作業,同步和警報。隨著時間的推移,系統會越來越少地安排維護視窗,有助於在裝置未連線到充電器時長時間不活動時減少電池消耗。

一旦使用者通過移動裝置,開啟螢幕或連線充電器喚醒裝置,系統退出doze並且所有應用程式恢復正常活動。

在低電耗模式下,您的應用會受到以下限制:

$ adb shell dumpsys battery unplug

$ adb shell dumpsys deviceidle step 切換到下乙個狀態,idle和active狀態之間切換

$ adb shell dumpsys deviceidle -h 檢視幫助

$ adb shell dumpsys deviceidle force-idle [light|deep] 強制進入idle狀態

$ adb shell dumpsys deviceidle force-inactive 強制進入inactive狀態

$ adb shell dumpsys deviceidle unforce 強制解除idle、inactive狀態,進入active狀態

$ adb shell dumpsys deviceidle get [light|deep|force|screen|charging|network] 獲取相應的當前狀態

$ adb shell dumpsys battery reset 復位預設值,恢復裝置啟用狀態。

$ adb shell dumpsys battery unplug

$ adb shell am set-inactive true 進入standby 模式

$ adb shell am set-inactive false 退出standby模式,恢復到啟用狀態

$ adb shell am get-inactive 獲取當前狀態

$ adb shell dumpsys battery reset 復位預設值。

為了最大化電池並強制執行良好的應用行為,當使用者看不到應用(或前台服務通知)時,android會限制後台工作。

限制了隱式廣播並引入了doze-on-the-go(縮短了進入doze模式的時間,相關限制分時分優先順序進行)。

三個被限制的隱式廣播:

進一步限制了後台行為,例如在後台獲取位置和釋放快取的喚醒鎖。

限制後台程序:應用在前台時,可以隨意建立前台和後台服務;應用剛剛進入後台時擁有乙個幾分鐘的視窗,此時也可以隨意建立前台和後台服務;進入idle狀態時,系統會終止應用的後台服務。

多數情況下jobscheduler(官方demo)可以取代後台服務,jobintentservice取代intentservice

對於解決如何確保應用能優雅地處理後台任務,官方提供了最佳實踐方案:

workmanager不熟悉,別的都很好理解,對於workmanager 說明一下:

對於可延遲的、非同步的、即使您的裝置或應用程式重新啟動也要執行的工作,請使用 workmanager。workmanager 可以在滿足工作條件(如網路可用性和功率)時優雅地執行可延遲的後台工作。

可以新增任務執行的約束條件,如網路狀態、充電狀態

可以處理一次性的非同步任務、週期性的任務

可以監視,管理已經安排好的任務

任務執行是有先後順序的,先觸發的先執行

能確保任務得到執行,即使應用重啟或裝置重啟

是遵從省電特性的,符合省電優化要求

使用workmanager的典型場景:

官方文件

workmanagersample

iOS後台任務

ios後台執行分方式有三種 後台永遠執行分為這幾種情況 獲取定位更新 getting location updates voip 呼叫 handing voip calls 實現方式 後台短暫執行 實現方式 接收進入後台通知 nsnotificationcenter defaultcenter ad...

powershell後台任務

比如在後台執行ping 8.8.8.8 start job scriptblock 從返回可以看到job的基本資訊 id name psjobtypename state hasmoredata location command 3 job3 backgroundjob running true l...

Linux 後台任務

1 我想把updatedb命令 用於重新建立整盤索引的命令 放在後台執行。updatedb 1 23336注釋 在所要執行的命令後面加上空格,再加上 符號即可實現後台執行。所返回的 1 表示這是第乙個你放到後台的任務。23336是這個任務的程序號。2 我執行updatedb時忘了加 了,這下我怎麼辦...