注意错别字,只是一个模拟。

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

 onPause()
  {
  }
}


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

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

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

最佳答案

创建一个Singleton类,如:-

在任何活动中,使用MyHandler.getHandler()运行它,并使用MyHandler.stopMyHandler()停止它。
在您的Activity课中:

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);
    }
}

在UI线程上运行的Runnable的代码:-
    @Override
    public void onPause()
    {
        super.onPause();
        MyHandler.pauseMyHandler(myRunnable);
    }

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

10-04 20:01