注意错别字,只是一个模拟。
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);
}