2

私が書いたとしましょう:

Runnable runnable = new Runnable(){
    @Override
    public void run() {
        Log.e(TAG, "runnable entered");
        // working
        Log.e(TAG, "runnable completed");
    }
};

Thread t = new Thread(runnable);
t.start();

runnableが入力t.start();されたログ メッセージが表示されます。スレッドで作業している間、実行可能ファイルが完了することを常に望んでおり、完了後、アプリケーションはこのスレッドで動作しなくなります。つまり、常にこのログランナブルを完了させる必要があります。

ここで、Thread クラスの代わりに Handler を使用するとします。

Handler handler = new Handler();
handler.post(runnable);

handler.removeCallbacks(runnable)is like runnable が完成し、アプリケーションがこの runnable で動作しなくなることを確認できますか?

4

1 に答える 1

3

handler.removeCallbacks(runnable)Runnablesメッセージキューから保留中を削除します。ただし、現在実行中の Runnable は停止しません。たとえば、A の Runnable があるとします。

class A implements Runnable {

    public void run() {
        handler.removeCallbacks(a);
        Log.i("tag", "are start");
                    // Do work
        Log.i("tag", "end");
    }
}

A a = new A();

そしてあなたは電話した

handler.post(a);

したがって、最初のランナブルが実行されると、removeCallbacksメソッドが呼び出されます。しかし、logcat では、出力が次のようになることがわかります。

始める

終わり

removeCallbacksメソッドで使用しない場合run、出力は次のようになります

始める

終わり

始める

終わり

于 2013-03-17T05:09:04.287 に答える