从另一个未创建它的活动中取消handler.postdelayed

时间:2013-09-19 13:21:08

标签: android handler android-handler

记住拼写错误,只是模拟。

class myActivity1 extends Activity
{
 oncreate()
  {
    Handler myHandler = new Handler();
    myHandler.postDelayed(myRunnable,1000)
  }

 onPause()
  {
  }
}

处理程序完成其工作,1秒后myRunnable运行。假设我在myRunnable中调用另一个postDelayed,重新启动postDelayed重复。

在myActivity1中,我没有使用removeCallbacks()函数,因此即使我离开活动,myHandler也会运行。

然而,我的问题是,我如何从我搬到的另一项活动中取消myHandler? (假设我的应用程序有15个活动,我不知道我在哪个活动中。)

1 个答案:

答案 0 :(得分:2)

创建一个Singelton类,如: -

public class MyHandler {
    private static Handler handler;

    public static Handler getHandler() {
        if (handler == null) {
            initHandler();
        }
        return handler;
    }

    private static void initHandler() {
        handler = new Handler();
        handler.postDelayed(myRunnable,1000);
    }

    public static void stopMyHandler() {
        handler.removeCallbacksAndMessages(null);
    }

    public static void pauseMyHandler(Runnable myRunnable) {
        handler.removeCallbacksAndMessages(myRunnable);
    }

    public static void resumeMyHandler(Runnable myRunnable) {
        handler.postDelayed(myRunnable,1000);
    }
}

使用MyHandler.getHandler()运行它,MyHandler.stopMyHandler()在任何活动中停止它。

Activity课程中: -

    @Override
    public void onPause()
    {
        super.onPause();
        MyHandler.pauseMyHandler(myRunnable);
    }

    @Override
    public void onResume()
    {
        super.onResume();
        MyHandler.resumeMyHandler(myRunnable);
    }

在UI线程上运行的Runnable代码: -

    runOnUiThread(new Runnable() {

          @Override
          public void run() {
                //update your UI
          }
    });