最近踩了一個坑,當Service以startForeground執行時,過幾小時卻還是會被系統殺掉,於是就想到會不會是Android的電池效能最佳化設定問題。
在電池效能最佳化的頁面,我們可以將APP設定為「不要最佳化」,說明寫「系統將不再限制應用程式在背景耗用電力」,如下圖:
有提到會影響背景執行,對於需要長時間在背景更新資訊的程式,這項功能勢必要關掉的。
我們可以在程式中判斷自己的APP是否有排除省電,然後直接詢問使用者是否允許排除:
首先在AndroidManifest.xml
中增加權限
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
在來在程式碼中做判斷與要求排除
//檢查是否在省電模式 val intentBattery = Intent() val packageName = this.packageName val pm = this.getSystemService(POWER_SERVICE) as PowerManager //app是否已排除省電 if (pm.isIgnoringBatteryOptimizations(packageName)) {//不在省電清單中 //跳到電池最佳化的頁面 intentBattery.action = Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS startActivity(intentBattery) } else {//在省電清單中,需要排除 intentBattery.action = Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS intentBattery.data = Uri.parse("package:$packageName") startActivity(intentBattery) }
這麼一來,就可以再度降低背景服務被殺掉的機率了!
-END-
發佈留言