0

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"。「はるかに」と言うときは、数分という意味です。

どうしたの?正確なタイミング システムが必要です。数秒は許容できますが、数分は許容できません。

さらに、デバイスがスタンバイ状態であっても、このスケジューリングがアクティブである必要があります

助けてくれてありがとう

4

1 に答える 1

0

実際の環境では、これらの更新は 10 分以上ごとに実行されます。私のテストでは 10 秒を使用しています。

それははるかに賢明です。

これらが私の要件である場合、あなたは何を提案しますか?

既存のコードをすべて削除します。

次に、イベントを設定し、自分または自分の/ロジックAlarmManager ELAPSED_REALTIME_WAKEUPに関連付けます。「デバイスがスタンバイ状態であってもスケジューリングがアクティブになる」という要件を満たすには、この組み合わせが必要です。BroadcastReceiverWakefulIntentServiceIntentServiceWakeLock

于 2013-05-13T13:15:00.563 に答える