實現app直播原始碼根據系統設定,最佳化電量的使用
針對電量最佳化android的改動
在最近幾個android版本中已存在的電量最佳化功能基礎上,Android 9 引入了一些新功能來持續改進裝置電源管理,以確保將系統資源提供給最需要它們app直播原始碼應用.
近幾個android版本中電量最佳化功能:
Android 5.0 Lollipop:
-
1.新增 Job Scheduling API 可以將作業推遲(合併)到稍後或指定條件下(如裝置充電或連入 WLAN 時)執行來最佳化電池壽命
-
2.新增 Battery Historian (電池歷史資料分析工具) 透過它瞭解整個系統的耗電情況,以及瞭解您的應用對裝置電池的影響
-
Android 6.0 Marshmallow 和 7.0 Nougat
-
根據裝置是否空閒狀態增加Doze低電耗模式和App Standby應用待機模式
-
Android 8.0 Oreo
-
1.後臺執行限制:當應用進入已快取狀態時,如果沒有活動的元件,系統將解除應用具有的所有喚醒鎖.此外,系統會限制未在前臺執行的應用的某些行為,具體如下:
-
在後臺執行的應用對後臺服務的訪問受到限制
-
應用無法使用其清單註冊大部分隱式廣播(即,並非專門針對此應用的廣播)
-
2.後臺位置限制
-
為降低功耗,Android 8.0 會對所有後臺應用檢索使用者當前位置的頻率進行限制(只允許後臺應用每小時接收幾次位置更新)
-
系統會對前臺應用和後臺應用進行區分.應用滿足以下任一條件即視為前臺應用:
-
它具有可見的 Activity,無論 Activity 處於啟動還是暫停狀態
-
它具有前臺服務
-
另一個前臺應用透過繫結到應用的其中一個服務或使用應用的其中一個內容提供程式與應用相連
-
如果以上所有條件均不滿足,應用即視為後臺應用
Android 9(API 28)電源管理
電源管理功能可以分為兩個類別:
- 應用待機群組
系統根據使用者的使用情況對應用程式進行分組,從而針對不同的分組施加不同程度的後臺限制(對 CPU 或電池等裝置資源的訪問限制).
- 省電模式改進
Android P 最佳化了現有的省電模式,在啟用省電模式之後,系統將對所有應用的後臺執行加以更加嚴格的限制
注:這些變化適用於所有應用,無論SDK是否為 Android 9.
應用待機群組:
應用待機分組可以根據應用的使用頻率或者最近一次使用時間,對其資源請求進行優先順序排序.應用待機分組一共有五個分組,系統會根據每個應用的使用情況,將其劃分至五個優先分組中的一個,而每個分組對裝置資源的排程各有不同的限制.
應用待機模式下共有以下五類群組:
-
活躍 (Active): 應用正在被使用,例如:
-
應用已啟動一個 Activity
-
應用正在執行前臺服務
-
應用的同步介面卡與某個前臺應用使用的 content provider 關聯
-
使用者在應用中點選了某個通知
-
如果應用處於“活躍”群組,系統不會對應用的作業、報警或 FCM 訊息施加任何限制
-
2.工作 (Working set): 應用使用頻率很高,例如:
-
使用者在大部分時間都啟動的某個社交媒體應用可能就屬於“工作集”群組 如果應用被間接使用,它們也會被升級到“工作集”群組中
-
如果應用處於“工作”群組,系統會對它執行作業和觸發報警的能力施加輕度限制
-
3.常用 (Frequent): 應用經常但不是每天被使用,例如:
-
使用者在健身房執行的某個鍛鍊跟蹤應用可能就屬於“常用”群組
-
如果應用處於“常用”群組,系統將對它執行作業和觸發報警的能力施加較強的限制,也會對高優先順序 FCM 訊息的數量設定限制
-
4.極少 (Rare): 應用偶爾被使用,例如:
-
使用者僅在入住酒店期間執行的酒店應用就可能屬於“極少使用”群組
-
如果應用處於“極少”群組,系統將對它執行作業、觸發警報和接收高優先順序 FCM 訊息的能力施加嚴格限制.系統還會限制應用連線到網路的能力
-
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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- app直播原始碼,Android 設定系統亮度APP原始碼Android
- app直播原始碼,ButtonTextView的背景設定APP原始碼TextView
- 直播系統app原始碼,根據前臺資料監控反饋到後臺的表格裡APP原始碼
- 直播系統app原始碼,用遞迴實現氣泡排序APP原始碼遞迴排序
- 電商直播系統原始碼:電商app的型別都有哪些?原始碼APP型別
- 直播系統原始碼,uni-app 設定狀態列背景色原始碼APP
- 直播系統app原始碼,Android studio 實現app登入註冊頁面APP原始碼Android
- 影片直播系統原始碼,例項原始碼系列-設定系統時間原始碼
- 直播app系統原始碼,使用element ui隱藏元件實現圖片預覽功能APP原始碼UI元件
- 直播APP原始碼,直播系統推流SDK(Android)APP原始碼Android
- 直播系統原始碼,實現倒數計時,定時任務原始碼
- 電影APP系統原始碼,定製功能開發APP原始碼
- 直播系統app原始碼,藉助django 實現顯示圖片功能APP原始碼Django
- 直播app系統原始碼,Flutter MaterialButton 實現圓角邊框按鈕APP原始碼Flutter
- 教你實現,搭建直播影片app原始碼的賬號體系APP原始碼
- 直播app原始碼,根據頁面滾動高亮顯示目錄的側邊欄APP原始碼
- 教育直播APP原始碼開發系統APP原始碼
- 直播app系統原始碼,dialogfragment設定底部沒有和螢幕有間隔APP原始碼Fragment
- 直播app原始碼,定時開關,實現計時器功能APP原始碼
- 直播電商原始碼,簡述直播的實現原理原始碼
- 直播app系統原始碼,Flutter中導航欄和狀態列設定成透明APP原始碼Flutter
- 直播系統原始碼,vue二種方式根據條件判斷顯示不同樣式原始碼Vue
- app直播原始碼如何實現直播間紅包功能APP原始碼
- 根據原始碼模擬實現express框架常用功能原始碼Express框架
- 找靠譜商家直播系統原始碼app!原始碼APP
- 直播系統app原始碼,元素水平垂直居中APP原始碼
- app直播原始碼,android AES加密解密實現APP原始碼Android加密解密
- 影片直播app原始碼,VBA 之Interior 物件設定底色APP原始碼物件
- 直播系統平臺搭建,自定義控制元件根據圖片寬度設定長度控制元件
- app直播系統原始碼,點選生成條形碼APP原始碼
- 線上直播系統原始碼,iOS 根據滑動距離改變狀態列顏色原始碼iOS
- 直播系統原始碼,vue實現無縫滾動原始碼Vue
- 直播APP原始碼實現直播流程上需要注意的內容APP原始碼
- 直播系統app原始碼,滑塊效果、slider用法APP原始碼IDE
- 直播系統app原始碼,TabLayout:自定義字型大小APP原始碼TabLayout自定義字型
- 教育直播APP系統原始碼,原生開發功能APP原始碼
- 直播app原始碼,HTML + jQuery 實現輪播圖APP原始碼HTMLjQuery
- 直播系統app原始碼,設定樣式(字型樣式、行列寬高、對齊方式、邊框)APP原始碼