我有一個問題,在android中使用TimerTask。情況是這樣的:Android TimerTask大不精確
我有一個擴展AsyncTask的類,調用MyAsyncTask,並且我在另一個類中有一個靜態方法,稱之爲SchedulerClass。
SchedulerClass有這個方法
TimerTask myTimerTask;
public static boolean scheduleMyJob() {
try {
Log.i(LOG_TAG,"entered in scheduleMyJob function");
MyAsyncTask task = new MyAsyncTask();
myTimerTask = new TimerTask() {
@Override
public void run() {
try {
_task .execute("");
} catch (Exception e) {
Log.e(LOG_TAG, "error executing task");
}
}
};
Timer t = new Timer();
t.schedule(myTimerTask , 10000);
return true;
} catch (Exception e) {
Log.e(LOG_TAG, "error scheduling task");
return false;
}
}
和MyAsyncTask是這樣
public class MyAsyncTask extends AsyncTask<String, Integer, String> {
@Override
protected String doInBackground(String... params) {
Log.i(LOG_TAG,"entered in MyAsyncTask.doInBackground method");
//DO MY STUFF
return "result";
}
@Override
protected void onPostExecute(String result) {
SchedulerClass.scheduleMyJob();
}
}
這種方法能正常工作的大部分時間,但有時myTimerTask之後定遠超過10秒:我可以讀取日誌"entered in scheduleMyJob function"
,但日誌"entered in MyAsyncTask.doInBackground method"
是在超過10秒(這是用於調度的時間)後寫入的。 當我說「更多」時,我的意思是分鐘。
有什麼不對?我需要一個精確的計時系統,我可以忍受幾秒鐘,但沒有幾分鐘。
而且我需要這個安排是積極的,即使設備處於待機
感謝所有幫助
「此外,即使設備處於待機狀態,我也需要此計劃處於活動狀態」 - 這意味着您絕不允許設備進入「待機」狀態。除非這樣做只會在非常短的時間內完成,並且完全在用戶控制下進行,否則用戶會對電量消耗不滿。 – CommonsWare 2013-05-13 12:30:32
這個應用程序在商業環境中使用,用戶知道這些連續更新,最重要的是,他們需要這些更新 – Apperside 2013-05-13 12:38:06
他們的設備將基本上無法使用,除非它們頻繁插入。移動設備CPU並不意味着運行不斷。 – CommonsWare 2013-05-13 12:44:52