【问题标题】:Stop handler in Android don't workAndroid中的停止处理程序不起作用
【发布时间】:2013-12-26 11:25:17
【问题描述】:

我有这个处理程序:

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() 我的应用程序崩溃。

我该如何阻止呢? 谢谢。

【问题讨论】:

    标签: android handler runnable


    【解决方案1】:

    在发布 Runnable 时不要使用 Thread.sleep() 使用 postDelayed()(而不是常规的 post())。

    【讨论】:

      【解决方案2】:

      哎呀,你正在使用

      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 的工作方式。

      【讨论】:

        猜你喜欢
        • 2014-12-20
        • 2013-01-11
        • 2013-04-03
        • 2023-03-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-07
        • 1970-01-01
        相关资源
        最近更新 更多