我有这个处理程序:
private Runnable mRunnableReset = new Runnable() {
public void run() {
Log.i("MyApp", "mRunnableReset");
}
};
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
public void run() {
while (true) {
try {
Thread.sleep(2000);
mHandler.post(mRunnableReset);
} catch (Exception e) {
// TODO: handle exception
}
}
}
};
我尝试在我的onDestroy()方法中使用此代码
mHandler.removeCallbacks(mRunnableReset);
mHandler.removeCallbacksAndMessages(null);
但是mRunnable仍在运行(我可以看到LogCat中的日志)。 如果我使用mRunnable.destroy()我的应用程序崩溃。
我怎么能阻止这个? 谢谢。
答案 0 :(得分:1)
你正在使用
while(true){
Thread.sleep(2000);
mHandler.post(mRunnableReset);
}
它将如何停止呢?它不会。
相反它应该是,
private Runnable mRunnableReset = new Runnable() {
public void run() {
Log.i("MyApp", "mRunnableReset");
mHandler.removeCallbacks(mRunnableReset);
mHandler.post(mRunnableReset);
}
};
private Handler mHandler = new Handler();
private Runnable mRunnable = new Runnable() {
public void run() {
try {
Thread.sleep(2000);
mHandler.post(mRunnableReset);
} catch (Exception e) {
// TODO: handle exception
}
}
};
然后停止mRunnableReset
使用mHandler.removeCallbacks(mRunnableReset);
最好使用mHandler.postDelayed(mRunnableReset, 2000)
代替Thread.sleep(2000);
同时检查我的回答here,以便完整掌握Handler的工作方式。
答案 1 :(得分:1)
在发布Runnable(而不是常规Thread.sleep()
)时,不要使用postDelayed()
使用post()
。