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); }