java - 如何停止 Handler Runnable?

标签 java android multithreading performance android-handler

我在以下程序中使用了一个处理程序,我想在 i=5 时停止它,但处理程序不会停止并连续运行。

   b1.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            handler = new Handler();
           runnable = new Runnable() {
                 public void run() {

                    try {
                        Toast.makeText(getApplicationContext(), "Handler is working", Toast.LENGTH_LONG).show();
                        System.out.print("Handler is working");

                       if(i==5){
                           //Thread.currentThread().interrupt();
                            handler.removeCallbacks(runnable);


                            System.out.print("ok");
                                        Toast.makeText(getApplicationContext(), "ok", Toast.LENGTH_LONG).show();
                        }
                       i++;
                    } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } 
                   handler.postDelayed(this, 5000); 

               }
           };
           handler.postDelayed(runnable, 5000);
           //return;
        }
    });

最佳答案

因为您在删除回调后再次调用 postDelayed()。请使用此代码:

final Handler handler = new Handler();
final Runnable runnable = new Runnable() {
         public void run() {
               Log.d("Runnable","Handler is working");
               if(i == 5){ // just remove call backs
                    handler.removeCallbacks(this); 
                    Log.d("Runnable","ok");
                } else { // post again
                    i++;
                    handler.postDelayed(this, 5000); 
                }
       }
   };

//now somewhere in a method
 b1.setOnClickListener(new OnClickListener() {
    public void onClick(View v) {
        handler.removeCallbacks(runnable); 
        handler.postDelayed(runnable, 5000); 
    }
});

关于java - 如何停止 Handler Runnable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18671067/

相关文章:

java - 滚动时移动 RecyclerView

android - 在三星设备(SM-J200F-sdk 22)中调用ACTION_VIEW(地理/ map )的Intent时,应用程序崩溃,但在许多其他设备上都可以使用!有什么办法吗?

使用 while 循环进行 Java 数据验证

java - 如何在 Java 中设置以下线程?

java - Swing 形式被卡住

java - 在 map java8 上用 lambda 计数器

java - 如何将 ContentProvider 与在线数据库一起使用

python - 在 Visual Studio Code 中运行外部程序时出现 "Unable to find thread for evaluation."

c++ - 多线程中的构造函数和析构函数

c - 分离的线程不会同时运行