3

タイマータスクを模倣するために、ハンドラーを作成しました。これは、TimerTask の動作がタブレットによって異なるためです。だから私はこのハンドラメソッドを作成しました。タイマーにはメソッドtimerTask.cancel(); がありましたが、このハンドラーを停止する方法は、アプリケーションが終了した後も実行を続けます。バックプレスの後でもログが実行されていることがわかります。

Handler handler = new Handler();

public void recursivelycallHandler(){
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            Log.d("handler is running", "true" + System.currentTimeMillis());
            recursivelycallHandler();

        }
    }, 100);
}
4

5 に答える 5

1

任意の条件を置くことによって

Handler handler = new Handler();
int i = 0;
Runnable myRunnable = new Runnable() {
        @Override
        public void run() {

            Log.d("handler is running", "true" + System.currentTimeMillis());
            if(i>5)
               handler.removeCallback(myRunnable);
            else{
                i++;
                handler.postDelayed(myRunnable, 100); // here is self calling
            }

        }
    };
}
handler.postDelayed(myRunnable, 100);

その再帰メソッドですが、再帰メソッドの代わりにrun()で同じRunnableオブジェクトを呼び出し、特定の状況/条件に基づいてそのオブジェクトを削除することができます

于 2013-01-24T13:20:35.023 に答える
0

あなたは以下のようなことをすることができます:

   public void recursivelycallHandler(){
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {

            Log.d("handler is running", "true" + System.currentTimeMillis());
            if(YOUR_CONDITION){
               recursivelycallHandler();
            }

        }
    }, 100);
}

あなたが私の主張を理解したことを願っています。

コメントしてください。

于 2013-01-24T13:19:52.653 に答える
0

runメソッドにisFinishedを追加するだけです。

    handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        if (isFinished())
               return;
        Log.d("handler is running", "true" + System.currentTimeMillis());
        recursivelycallHandler();

    }
}, 100);
于 2013-01-24T13:20:19.150 に答える
0

フラグ (boolean var) を保存して、ハンドラーを呼び出す必要があるかどうかを検出し、アプリを終了する前にこのフラグを false に変更して、ハンドラーの呼び出しを停止できます。

于 2013-01-24T13:18:40.430 に答える