本文爲 Android 電量管理系列連載的第四篇,但願能夠爲各位開發者提供設備續航方面的戰略洞見和實踐指南。
html
做爲一款移動端操做系統,Android 在設計之初就考慮到了諸如內存和電量一類的資源限制問題。所以,系統在內存吃緊的狀況下會關閉部分進程,以此來爲優先級更高的任務騰出運行空間。那麼系統是如何評判優先級高低的呢?判斷標準其實很簡單,關鍵就在於應用進程對用戶有多重要。Android 將進程分爲如下幾類,按重要性的高低作降序排列,進程排名越靠前,被回收的概率就越低。android
應用產生緩存很正常: 每一個開發者應該認識到,共享設備資源是生命週期管理的一部分,這樣纔有助於營造健康的 Android 生態環境。當電池電量耗盡時,全部應用都沒法繼續使用,而致使耗電異常的應用則會面臨卸載風險。緩存
不過在特定狀況下,開發者的確須要把應用從後臺轉到前臺運行。當應用所執行的任務同時知足如下條件時,您能夠爲其建立前臺服務,直至任務運行結束: (1) 須要當即執行; (2) 重要 (必須完成); (3) 用戶可感知 (大部分狀況下由用戶主動發起); (4) 有明確的起始時間和結束時間。網絡
爲了幫助您更好地建立和管理前臺服務,咱們特別爲總結了如下 3 個操做要點:app
適用於全部 API 等級: 應用建立服務時,必須顯示級別至少爲 PRIORITY_LOW 的常駐通知 (persistent notification)。ide
若應用的目標 API 等級高於 26,您還須要將通知渠道的級別至少設定爲IMPORTANCE_LOW。用戶能夠點擊通知來取消任務,且取消操做可與 action 綁定,例如,當用戶中止播放曲目後,回放服務也會一同中止。工具
通知標題和描述必須準確體現前臺服務正在執行的操做。優化
若是您想了解有關前臺服務的更多信息,包括最近幾個版本 Android 平臺內的相關重要更新,請參閱《在前臺運行服務》。ui
前臺服務的典型用例包括播放音樂、完成購買交易、高精度地理位置追蹤 (健身應用) 以及感應器數據錄入 (監測用戶的睡眠狀態)。這些工做均由用戶主動發起,須要馬上執行,而且具有明確的起始時間和結束時間,並且容許用戶隨時取消操做。google
此外,您還能夠爲須要當即執行的關鍵任務 (如保存圖片、發送消息、處理交易等) 建立前臺服務,那麼即便用戶退出當前應用並開啓新的應用,這些任務的執行也不會受到影響。在設備內存不足的狀況下,系統可能會強行中止還在運行的前一個應用,從而致使數據丟失或其它意外事件。優秀的應用應當具有實時監測自身進程的能力,並在進程轉入後臺後,將用時較短的關鍵任務切換至前臺完成。
若是應用須要一直在前臺運行服務,那麼僅僅建立前臺服務是不夠的,建議您從如下用例中並選擇最適方案,在知足應用需求的同時爲設備節省電量。
不建議您經過前臺服務實現被動定位追蹤,若是用戶已經容許您的應用進行地理位置追蹤,請調用 FusedLocationProvider API 獲取位置更新,並注意設置合適的獲取頻率 (切勿太頻繁) ;在宿主設備進入或離開特定區域時,請經過 geofencing API 向用戶發送通知。 更多技術細節,請閱讀《延長設備續航時間之位置管理優化》。
請經過 CompanionDeviceManager 完成藍牙設備配對。若是應用須要從新鏈接至設備,請調用 BluetoothLeScanner 中接受 PendingIntent 參數的 startScan 方法,當過濾條件知足時會被觸發。
若是任務必須完成,但容許推遲執行,請使用 WorkManager 或者 JobScheduler 在系統層面上實現最佳的任務調度和時間安排。若是任務須要當即開始,可是一旦用戶退出應用,任務也會一同中止,推薦您使用 ThreadPools 或 Kotlin Coroutines。
下載管理器 (DownloadManager) 能夠幫助您在後臺處理耗時較長的下載任務,並且它支持斷點續傳,即便在網絡鏈接斷開或設備重啓的狀況下,管理器依舊能夠繼續上次下載。
若是運用得當,應用即可以經過前臺服務這條 「溝通渠道」, 告知系統本身當前正在運行對用戶而言十分重要的任務。正確的工具決策是通向一流用戶體驗的最佳途徑。歡迎您在社區內踊躍發言並並向咱們積極反饋,攜手廣大開發者共同制定更優決策,將用戶放在第一位!
點擊這裏瞭解更多 P&E 相關產品內容