我在我的应用程序中有一种特殊的行为,即使该应用程序关闭/被杀死,该处理程序仍会继续运行。我使用了以下内容:
fun xyz() {
Handler().postDelayed({
// do stuff
xyz()
}, 3000)
}
[从互联网上,我了解到有一个处理程序更好(而不是每次都创建一个新的处理程序),并且您必须调用handler.removeCallbacksAndMessages(null)
来清理所有递归回调。活动被销毁后,我正在使用以下代码来清理我的处理程序。
override fun onDestroy() {
super.onDestroy()
handler.removeCallbacksAndMessages(null)
}
在Android的Documentation中,它表示:
[在某些情况下,系统将简单地杀死活动的托管过程而没有在其中调用此方法(或任何其他方法),因此不应将其用于处理该过程消失后仍然存在的事情。
如果系统在不调用onDestroy()
的情况下终止了我的活动的托管进程,则处理程序将继续在后台运行吗?
当您呼叫postDelayed
时,会将Runnable
放到MessageQueue
的MainThread
中。正如文档所说的kill the activity's hosting process
,process
kill意味着所有内部线程都将被杀死,因此您的Handler
也将被杀死,而无需调用onDestroy
的Activity
。