android下的定時器在關閉屏幕後會自己停掉解決方法
阿新 • • 發佈:2019-02-05
好坑,沒系統的學過android,寫一東西,尼瑪發現連著usb線,神馬都正常,但是拔掉usb線後,螢幕自動關閉後,android下的定時器就失效了.尼瑪,調了好久才發現的.
那麼,腫麼辦?會遇到這個問題,一般都是學過java,然後直接跑去寫android的,感覺.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
在Android上常用的定時器有兩種,一種是Java.util.Timer,一種就是系統的AlarmService了。
實驗 1 :使用Java.util.Timer。
在onStart()創建立Timer,每 5 秒更新一次計數器,並啟動。
mTimer = new
Timer();
mTimer.schedule( new
TimerTask() {
@Override
public
void run() {
++mCount;
mHandler.sendEmptyMessage( 0 );
}
}, 5 * 1000 ,
5 * 1000 );
當連線USB線進行除錯時,會發現一切工作正常,每 5 秒更新一次介面,即使是按下電源鍵,仍然會 5 秒觸發一次。
當拔掉USB線,按下電源鍵關閉屏幕後,過一段時間再開啟,發現定時器明顯沒有繼續計數,停留在了關閉電源鍵時的數字。
實驗 2 :使用AlarmService:
2.1 通過AlarmService每個 5 秒傳送一個廣播,setRepeating時的型別為AlarmManager.ELAPSED_REALTIME。
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME, firstTime,
5 * 1000 , sender);
拔掉USB線,按下電源鍵,過一段時間再次開啟螢幕,發現定時器沒有繼續計數。
2 .2setRepeating是的型別設定為AlarmManager.ELAPSED_REALTIME_WAKEUP
AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, firstTime,
5 * 1000 , sender);
拔掉USB線,按下電源鍵,過一點時間再次開啟螢幕,發現定時器一直在計數。
如此看來,使用WAKEUP才能保證自己想要的定時器一直工作,但是肯定會引起耗電量的增加。
|