handler.removeCallbacks(runnable)是否与thred的退出等效

时间:2013-03-16 09:39:24

标签: android multithreading

说我写:

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();

t.start();之后,我们会收到可运行的日志消息。 虽然工作将线程我总是希望我的runnable完成&完成后,我的应用程序将不再在此线程上工作。 即我应该始终将此日志 runnable completed ;

现在假设我使用Handler而不是Thread类。

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

我可以确定handler.removeCallbacks(runnable)是否像runnable一样已经完成,我的应用程序将不再适用于此runnable?

1 个答案:

答案 0 :(得分: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);

因此,当第一个runnable执行时,它将调用removeCallbacks方法。但是在logcat中你会看到输出是

  

启动

     

如果你不在removeCallbacks方法中使用run,那么输出将是

  

启动

     

     

启动