1. 程式人生 > >Android 8.0 AlarmManager 後臺定時任務

Android 8.0 AlarmManager 後臺定時任務

blank 也有 情況 pre ati ng- TP 問題 manage

以前在Android 4.0時,alarmManager 沒什麽問題。後來android為了優化系統耗電情況,引入了doze模式,參見此頁

https://developer.android.com/training/monitoring-device-state/doze-standby

簡單地說,系統會長時間待機後,會自動進入doze模式,這種模式裏,alarmManager啥的都不好用了,系統會自動從doze模式轉出來一小段時間,把剛在在doze裏被忽略的事件(比如說alarmManager)執行。這樣一來,alarmManager根本無法定時調用了。

其實,對於每個應用,這個模式是可以配置的,一般在 Settings > Battery > Battery Optimization,也可以用代碼打開設置頁面,讓用戶設置,下面是一段別人寫的代碼:

 Intent intent = new Intent(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS);  
           intent.setData(Uri.parse("package:user.zhuku.com"));  
           startActivity(intent);  

華為手表,在wear os 2.0上,也有類似的選項。

Android 8.0 AlarmManager 後臺定時任務