我在我的android應用中實現了一個啓動計時器的服務(使用標準的java.util.Timer和java.util.TimerTask機制)在預定義的時間間隔內在後臺執行一些處理。在Android中實現一個始終處於活動狀態的計時器(即使在屏幕超時期間)
public class BackgroundProcessingService extends Service {
private int interval;
private Timer timer = new Timer();
public void onCreate() {
super.onCreate();
startTimer();
}
@Override
public void onDestroy() {
timer.cancel();
super.onDestroy();
}
public int getInterval() {
return interval;
}
public void setInterval(int interval) {
this.interval = interval;
}
private void startTimer() {
timer.scheduleAtFixedRate(new TimerTask() {
public void run() {
// perform background processing
}
}, 0, getInterval());
; }
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
服務啓動/用我的應用程序是這樣停止。
backgroundProcessingService = new Intent(getApplicationContext(), BackgroundProcessingService .class);
startService(backgroundProcessingService);
只要電話處於活動狀態(沒有屏幕超時發生),該服務被細運行,並且所述定時器在定義的時間間隔執行它的工作。即使我退出應用程序(使用後退按鈕),計時器仍然保持活動狀態。
但是,一旦手機進入超時狀態,計時器任務不再穩定運行。如果我在幾個小時(晚上)超時的情況下離開電話,我會在隨機場合(有時間隔幾個小時)看到計時器已加入。
此外,當手機再次啓動時,所有計時器都會運行已經排隊的隊伍在恢復到正常間隔之前突然執行一次。
即使在電話進入超時狀態後,實現定時器仍能正常運行的正確方法是什麼?我是否應該使用PowerManager和WAKE_LOCKS(如此處所述http://code.google.com/android/reference/android/os/PowerManager.html),還是有其他機制?
和我一模一樣! – 2012-11-21 18:37:37