说我写:
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?
答案 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
,那么输出将是
启动
端
启动
端