最近踩了一個坑,當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-
發佈留言