1. 程式人生 > >android下的定時器在關閉屏幕後會自己停掉解決方法

android下的定時器在關閉屏幕後會自己停掉解決方法

好坑,沒系統的學過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才能保證自己想要的定時器一直工作,但是肯定會引起耗電量的增加。