android - removeCallbacks 没有停止可运行

标签 android runnable

我从一个方法调用:

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/

相关文章:

android 到 appEngine 图片内容类型

android - 是否可以在水平方向的布局编辑器中显示 RecyclerView 预览?

java - 线程名称和两次调用run方法

java - 如何多次实例化一个实现可运行并打开套接字的类?

java - 为什么传递给 runnable 的变量需要是最终的?

java - 无法从具有 ListView 的 fragment 导航到另一个 fragment

Android Modbus RTU 库

android - 如何将我的网络库集成添加到 android 中的 FBReaderj 中?

java - 关于多线程访问和编辑全局字段

java - 如何从另一个 Activity 访问在一个 Activity 中实例化并在其自己的线程中运行的对象?