猛禽洛的程式筆記庫

[Android] 將APP排除省電,使背景服務 Service 可以長時間運行

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *