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"
。「はるかに」と言うときは、数分という意味です。
どうしたの?正確なタイミング システムが必要です。数秒は許容できますが、数分は許容できません。
さらに、デバイスがスタンバイ状態であっても、このスケジューリングがアクティブである必要があります
助けてくれてありがとう