1

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

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

 onPause()
  {
  }
}

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

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

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

4

1 回答 1

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

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

    runOnUiThread(new Runnable() {

          @Override
          public void run() {
                //update your UI
          }
    });
于 2013-09-19T13:38:48.090 回答