我从一个方法调用:
myHandler.postDelayed(mMyRunnableHide, 6000);
调用:
public Runnable mMyRunnableHide = new Runnable()
{
public void run()
{
mTextDisplay.setText("");
DisplayX();
}
};
如果点击屏幕上的按钮,我想停止可运行:
Button next = (Button) findViewById(R.id.Breaction);
next.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
myHandler.removeCallbacks(mMyRunnableHide);
mTextDisplay.setText("");
DisplayX();
}
});
}
removecallbacks 不会停止可运行对象。我究竟做错了什么?我使用正确的方法吗?当用户单击按钮时,我只想让可运行对象“不运行”。
感谢您的帮助。
最佳答案
在我看来,removeCallbacks(..)
只会停止 pending 消息(Runnables)。如果您的 runnable 已经开始,那么就没有停止它(至少不是这样)。
或者,您可以扩展 Runnable 类并为其提供某种终止开关,如下所示:
public class MyRunnable implements Runnable
{
private boolean killMe = false;
private void run()
{
if(killMe)
return;
/* do your work */
}
private void killRunnable()
{
killMe = true;
}
}
这只会阻止它启动,但您可以偶尔检查 killMe
并退出。如果您正在循环运行可运行文件(例如某种后台线程),您可以说:
while(!killMe) {
/* do work */
}
希望对你有帮助
编辑我只是想发布关于此的更新。自从这篇原始文章以来,Google 提出了一个名为 AsyncTask 的出色类,它可以为您处理所有这些事情。任何阅读本文的人都应该仔细研究它,因为它是正确的做事方式。
您可以阅读 here
关于android - removeCallbacks 没有停止可运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5844308/