记住拼写错误,只是模拟。
class myActivity1 extends Activity
{
oncreate()
{
Handler myHandler = new Handler();
myHandler.postDelayed(myRunnable,1000)
}
onPause()
{
}
}
处理程序完成其工作,1秒后myRunnable运行。假设我在myRunnable中调用另一个postDelayed,重新启动postDelayed重复。
在myActivity1中,我没有使用removeCallbacks()函数,因此即使我离开活动,myHandler也会运行。
然而,我的问题是,我如何从我搬到的另一项活动中取消myHandler? (假设我的应用程序有15个活动,我不知道我在哪个活动中。)
答案 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
}
});