我一直在我的应用程序中使用
mode = singleInstance
运行一项活动。在此活动 onStart() 方法中,我正在初始化这样的处理程序
Handler handler;
@Override
protected void onStart() { // running handler with post delayed of 5 seconds
handler = new Handler();
handler.postDelayed(() -> {
// doing something
}
}, 5000);
现在,当用户从任何其他应用程序返回我的 Activity 时,会触发一系列 Activity 生命周期事件
-> onCreate() // first instance created
-> onStart() // on start of first instance called
-> onCreate() // second instance created
-> onStart() // on start of second instance called
-> onDestroy() // first instance on destroy called
现在处理程序运行两次,因为 onStart() 为创建的两个不同实例调用了两次。 我想停止第一个实例的处理程序执行,因为它在创建后立即销毁。我使用
handler.removeCallbacksAndMessages(null);
它正在停止第二个实例处理程序的执行。
我如何确保只执行正在运行的活动处理程序实例?
当活动结束时,您应该使用 onDestroy() 调用removeCallbacksAndMessages函数。这将清理处理程序,以便一次只运行一个处理程序。