應用後臺省電祕籍——低功耗狀態下應用如何正常運行?

應用退居後臺,如何在低功耗的狀況下保證任務正常運行?本文華爲軟件功耗專家黃文將分享議題——應用後臺功耗經驗。html

本文將從安卓綠色聯盟功耗標準2.0、谷歌後臺功耗方案、華爲後臺功耗方案以及開發者資源使用建議和檢測工具五大方面進行全面講解。android

安卓綠色聯盟功耗標準2.0

《安卓綠色聯盟應用體驗標準2.0---功耗標準》詳細介紹了應用後臺軟資源和硬資源的使用標準,查看詳情請訪問安卓綠色聯盟官網。shell

谷歌後臺功耗方案

谷歌從Android M開始着力改善終端的續航表現。Android版本在演進中主要提供以下幾個方案。網絡

1.後臺位置限制:app

對後臺應用獲取用戶當前位置的頻率進行限制。工具

相關連接:https://developer.android.google.cn/about/versions/oreo/background-location-limits測試

2.後臺服務限制:大數據

限制應用在後臺運行服務,並禁止應用經過隱藏/不可見方式調用 CPU 或網絡資源。優化

相關連接:https://developer.android.google.cn/about/versions/oreo/background#servicesui

3.後臺限制:

當系統檢測到應用出現不良行爲時,系統會向用戶詢問是否要限制該應用在後臺訪問設備資源。

相關連接:https://developer.android.google.cn/topic/performance/background-optimization#bg-restrict

4.谷歌後臺功耗方案-Doze(低耗電模式和應用待機模式)

谷歌在Android M版本引入了Doze方案,此方案主要針對後臺應用在沒有活動的狀況下作某些限制。設備未充電且屏幕關閉處於空閒狀態一段時間後,系統會進入低耗電或者應用待機模式,對應用行爲施加相應限制。

相關連接:https://developer.android.google.cn/about/versions/marshmallow/android-6.0-changes#behavior-power

 

 

如圖所示,如下是Doze模式各狀態說明:

ACTIVE: 設備活動態

INACTIVE:設備不活躍(滅屏、不運動) 等待進入idle.

IDLE_PENDING: 設備準備進入下一階段

SENSING: 傳感器檢測設備是否運動

LOCATING: 設備位置變化.

IDLE: 設備進入idle,並儘可能長時間保持該狀態

IDLE_MAINTENANCE: 退出idle進入「維護期」

谷歌還引入了Light-Doze(Android N)和Deep-Doze(Android M)的概念,具體內容以下:

 

5.應用待機羣組

應用待機羣組對應用進行分組管理,不一樣的分組享有不一樣的權限設置,杜絕了對應用一刀切的現象。

相關連接:https://developer.android.google.cn/preview/features/power#buckets

應用待機分組:

1)活躍 (Active): 應用正在被使用

2)工做 (Working set): 應用使用頻率很高

3)經常使用 (Frequent): 應用常常但不是天天被使用

4)極少 (Rare): 應用偶爾被使用

5)從不(Never):安裝後一次都未被使用過的應用

分組策略:

 

調試:

經過adb命令將應用手動劃分至某一待機羣組。輸入如下命令,更改羣組:

$ adb shell am set-standby-bucket packagename active/working_set/frequent/rare

輸入如下命令,查看應用所處羣組:

$ adb shell am get-standby-bucket [packagename]

爲促進用戶體驗,谷歌對應用在後臺狀態下的建議以下:

 

華爲後臺功耗方案

1.華爲的功耗方案,主要是在谷歌的基礎上對應用的異常行爲進行監控,經過智電機器人,識別後臺應用的行爲是正常耗電仍是異常耗電。

2.華爲的優化分爲主動優化和異常防禦。

主動優化在谷歌運行方案的基礎上增長了冷凍方案,應用退到後臺後,在沒有用戶可感知狀態和活動下,將應用所佔用的資源包括CPU、軟硬件資源等所有暫停。一旦應用須要運行,資源會啓動恢復流程,這就是主動優化。

華爲的盾防系統會監控全部後臺資源消耗狀況,在用戶未感知的狀況下,一旦資源消耗超過華爲功耗紅線標準,便會發出高耗電提醒,這就是華爲的異常防禦。

具體紅線標準請參考《安卓綠色聯盟應用體驗標準2.0---功耗標準》,標準包括持鎖阻止系統休眠、alarm頻繁喚醒系統、後臺CPU高負載耗電、長時間網絡定位等。

3.華爲低功耗Power kit包括PUSH+NC和Bastet鏈路託管技術。

應用推送遠程通知,可使用華爲PUSH NC。

相關連接:

https://developer.huawei.com/consumer/cn/service/hms/pushservice.html

應用保持長連接,能夠接入華爲鏈路託管技術Bastet.

相關連接:

https://developer.huawei.com/consumer/cn/devservice/doc/30401

開發者資源使用建議

1.定時任務

推薦綠色機制:

  • 本地高頻任務,建議使用Handler機制;
  • 本地低頻定時任務,建議使用AlarmManager的set()和setInexactRepeating()方法分別處理單次和循環屢次的調用;
  • 特定條件(網絡、充電),可延遲定時任務,推薦JobScheduler/WorkManager。

2.網絡

推薦綠色機制:

  • 避免頻繁、零散的網絡請求,推薦統一批量網絡請求;
  • 避免在低電量、弱網絡、移動網絡執行過多的網絡請求,在充電、wifi網絡下進行大數據量請求;
  • 應用離開界面或進入後臺及時關閉再也不使用的TCP連接,避免出現大量未關閉狀態TCP連接。

 

 

 

3.Wakelock

推薦綠色機制:

  • 確保喚醒鎖再也不須要時當即釋放;
  • 申請和釋放必須成對出現;
  • 推薦使用超時鎖acquire(timeout),提早結束後主動釋放超時鎖。

資源使用檢測工具

1.Battery Historian

相關連接:https://developer.android.google.cn/topic/performance/power/battery-historian

2. AT&T Application Resource Optimizer

擅長於網絡跟蹤

相關連接:

https://developer.att.com/application-resource-optimizer

3. Android vitals

對過分喚醒、wifi掃描、網絡使用、長時間持喚醒鎖、進行監控,並輸出報告

相關連接:https://developer.android.google.cn/topic/performance/vitals/

總結

爲保證應用在低功耗的狀況下可以正常的運行任務,建議使用以下方案:

1.研發階段:

1)推送遠程通知消息,需使用FCM或華爲PUSH NC。

2)保持長連接心跳,需使用華爲Modem鏈路託管技術(華爲Bastet)

3)用戶觸發的後臺業務,需使用前臺服務+常駐通知。

  • 後臺下載、播放音樂、錄音、導航、計步、騎行記錄軌跡、同步照片等。
  • 讓用戶可以感知到(可見、可聽),包括聲音、通知欄、widget提示等。

4)非用戶觸發可推遲的任務,需使用JobScheduler/WorkManager。

  • 需在充電、Wifi環境、Doze窗口期進行。
  • 禁止在低電量(<30%)、省電模式、長待機(滅屏超過30min)、夜間(0:00~6:00)進行。

5)合理使用Alarm,Wakelock,Network,GPS等軟硬資源。

  • 統一使用,避免頻繁使用。
  • 按需使用,及時釋放。

2.測試驗收:

藉助工具,使用battery-historian、 ARO、Android vitals分析運行時和長待機狀況。

3.禁止行爲:

惡意保活,包括無聲播放、一像素界面、低流量下載等。

關注安卓綠色聯盟公號,回覆「2304」獲取PPT

相關文章
相關標籤/搜索