實現app直播原始碼根據系統設定,最佳化電量的使用

雲豹科技曉彤發表於2021-08-20

針對電量最佳化android的改動

在最近幾個android版本中已存在的電量最佳化功能基礎上,Android 9 引入了一些新功能來持續改進裝置電源管理,以確保將系統資源提供給最需要它們app直播原始碼應用.

近幾個android版本中電量最佳化功能:

Android 5.0 Lollipop:

  1. 1.新增 Job Scheduling API 可以將作業推遲(合併)到稍後或指定條件下(如裝置充電或連入 WLAN 時)執行來最佳化電池壽命

  2. 2.新增 Battery Historian (電池歷史資料分析工具) 透過它瞭解整個系統的耗電情況,以及瞭解您的應用對裝置電池的影響

  3. Android 6.0 Marshmallow 和 7.0 Nougat

  4. 根據裝置是否空閒狀態增加Doze低電耗模式和App Standby應用待機模式

  5. Android 8.0 Oreo

  6. 1.後臺執行限制:當應用進入已快取狀態時,如果沒有活動的元件,系統將解除應用具有的所有喚醒鎖.此外,系統會限制未在前臺執行的應用的某些行為,具體如下:

  7. 在後臺執行的應用對後臺服務的訪問受到限制

  8. 應用無法使用其清單註冊大部分隱式廣播(即,並非專門針對此應用的廣播)

  9. 2.後臺位置限制

  10. 為降低功耗,Android 8.0 會對所有後臺應用檢索使用者當前位置的頻率進行限制(只允許後臺應用每小時接收幾次位置更新)

  11. 系統會對前臺應用和後臺應用進行區分.應用滿足以下任一條件即視為前臺應用:

  12. 它具有可見的 Activity,無論 Activity 處於啟動還是暫停狀態

  13. 它具有前臺服務

  14. 另一個前臺應用透過繫結到應用的其中一個服務或使用應用的其中一個內容提供程式與應用相連

  15. 如果以上所有條件均不滿足,應用即視為後臺應用

Android 9(API 28)電源管理

電源管理功能可以分為兩個類別:

  • 應用待機群組

系統根據使用者的使用情況對應用程式進行分組,從而針對不同的分組施加不同程度的後臺限制(對 CPU 或電池等裝置資源的訪問限制).

  • 省電模式改進

Android P 最佳化了現有的省電模式,在啟用省電模式之後,系統將對所有應用的後臺執行加以更加嚴格的限制

注:這些變化適用於所有應用,無論SDK是否為 Android 9.


應用待機群組:

應用待機分組可以根據應用的使用頻率或者最近一次使用時間,對其資源請求進行優先順序排序.應用待機分組一共有五個分組,系統會根據每個應用的使用情況,將其劃分至五個優先分組中的一個,而每個分組對裝置資源的排程各有不同的限制.

應用待機模式下共有以下五類群組:

  1. 活躍 (Active): 應用正在被使用,例如:

  2. 應用已啟動一個 Activity

  3. 應用正在執行前臺服務

  4. 應用的同步介面卡與某個前臺應用使用的 content provider 關聯

  5. 使用者在應用中點選了某個通知

  6. 如果應用處於“活躍”群組,系統不會對應用的作業、報警或 FCM 訊息施加任何限制

  7. 2.工作 (Working set): 應用使用頻率很高,例如:

  8. 使用者在大部分時間都啟動的某個社交媒體應用可能就屬於“工作集”群組 如果應用被間接使用,它們也會被升級到“工作集”群組中

  9. 如果應用處於“工作”群組,系統會對它執行作業和觸發報警的能力施加輕度限制

  10. 3.常用 (Frequent): 應用經常但不是每天被使用,例如:

  11. 使用者在健身房執行的某個鍛鍊跟蹤應用可能就屬於“常用”群組

  12. 如果應用處於“常用”群組,系統將對它執行作業和觸發報警的能力施加較強的限制,也會對高優先順序 FCM 訊息的數量設定限制

  13. 4.極少 (Rare): 應用偶爾被使用,例如:

  14. 使用者僅在入住酒店期間執行的酒店應用就可能屬於“極少使用”群組

  15. 如果應用處於“極少”群組,系統將對它執行作業、觸發警報和接收高優先順序 FCM 訊息的能力施加嚴格限制.系統還會限制應用連線到網路的能力

  16. 5.從未使用: 安裝後一次都未被使用過的應用,系統會對這些應用施加極強的限制

系統將動態分配各個應用至不同分組,並根據需求重新分配所在分組。系統或會透過利用機器學習預載入的應用,從而預測各個應用的使用機率,然後將它們編配至相應的群組中。若裝置中沒有安裝此類系統應用,在預設情況下,系統會根據應用的近期使用情況進行等級劃分。應用活躍度越高,所處分組的優先順序就越高,也就相應地更容易獲取裝置資源。尤其是,應用所處的的群組決定了其所安排的任務 (job),觸發標準鬧鈴以及接受高優先順序Firebase Cloud Messagesing資訊的頻率。這些限制僅在非充電狀態下才有效;當裝置充電時,應用並不會受到系統限制

注意:應用待機群組限制不適用於低耗電模式白名單中的應用,應用可以透過呼叫UsageStatsManager.getAppStandbyBucket() 查詢當前屬於哪個群組

APP如何適配新的電源管理功能?

  • 不要讓app直播原始碼所屬群組處於一種不斷變換的狀態.裝置廠商可以選擇使用自己的演算法編寫分組應用.相反,確保應用無論處於哪一個分組時行為都很恰當

  • 如果app直播原始碼沒有啟動器 Activity,那麼它可能永遠不會升級到“活躍”分組中.需要重新設計應用,使之具有此類 Activity

  • 如果app直播原始碼的通知不可操作,使用者與通知互動將無法觸發應用向“活躍”群組的升級

  • 類似的,如果app直播原始碼在收到高優先順序FCM訊息時不顯示通知,那麼它不會向使用者提供與應用互動的機會,也不會藉此升級到“活躍”群組中

如果使用者重複忽略了某個通知,系統將向使用者提供未來阻止該通知的選項.請不要為了讓您的應用處於“活躍”群組而向使用者濫發通知!

  • 如果app直播原始碼分為多個軟體包,那麼這些軟體包可能處於不同的群組中,進而擁有不同的訪問許可權級別.請務必對軟體包被歸類到各個群組的此類應用進行測試,以便確保應用行為正常

省電模式改進: Android 9 對省電模式進行了多處改進.裝置製造商可以決定施加的確切限制.例如,在 AOSP 構建中,系統會應用以下限制:

  • 系統會更積極地將應用置於應用待機模式,而不是等待應用空閒。

  • 後臺執行限制適用於所有應用,無論它們的目標 API 級別如何。

  • 當螢幕關閉時,位置服務可能會被停用。

  • 後臺應用沒有網路訪問許可權。

此外,還有一些裝置特定的其他電源最佳化.


測試電源管理功能下應用的執行狀態:

可以使用adb shell 命令測試多個電源管理功能

1.將應用手動更改為指定應用待機群組.

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

還可以使用該命令一次設定多個軟體包:

$ adb shell am set-standby-bucket package1 bucket1 package2 bucket2...

要檢查應用處於哪一個群組.

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

如果您不傳遞 packagename 引數,命令將列出所有應用的群組.並且可以呼叫UsageStatsManager.getAppStandbyBucket()在執行時查詢所屬的群組.

2.省電模式

可以使用多個命令測試您的應用在低電量條件下的行為(還可以在Settings > Battery saver 介面將裝置置於省電模式)

模擬拔下裝置電源時的情形

$ adb shell dumpsys battery unplug

測試裝置在低電量條件下的行為

$ adb shell settings put global low_power 1

完成測試後,撤消裝置的手動設定

$ adb shell dumpsys battery reset

宣告:本文由雲豹科技轉發自zhangbijun1230部落格,如有侵權請聯絡作者刪除


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70002045/viewspace-2788053/,如需轉載,請註明出處,否則將追究法律責任。

相關文章