Android service在某些Android版本上被kill後沒法自動啓動

Android widget插件,須要服務一直運行,定時更新時間及天氣數據,可是在Android 7.0的設備上測試沒有問題,雖然鎖屏一段時間後,即手機進入休眠狀態後,服務會暫停,但手機在亮屏的瞬間,服務會從新啓動。這是在控制功耗的狀況下比較完美解決。java

然鵝,運行在Android 9.0的設備上,問題就出現了,就算不鎖屏運行一段時間後,服務都會自動終止,且沒法從新啓動,手機關機重啓後,沒啓動。ide

在博客上看前輩的解決方案,大都是以下的解決方案性能

一、讓服務持續運行而不受手機休眠的影響,要這樣處理:
在onCreate裏面添加:

pm = (PowerManager)MyApplicationHolder.getContext().getSystemService(Context.POWER_SERVICE);  
wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "myservice");  
wl.acquire();  
在onDestroy裏添加:

wl.release();

這種處理方案顯然不適合個人這種狀況。測試

後來在onStartCommand方法中有幾個變量:ui

解決方案:手動返回START_STICKY,親測這樣設置後,原問題解決,且觀測手機喚醒曲線,證實這樣設置不會形成額外的性能消耗。插件

@Override  
public int onStartCommand(Intent intent, int flags, int startId) {  
    flags = START_STICKY;  
    return super.onStartCommand(intent, flags, startId);  
}
相關文章
相關標籤/搜索