所以这就是我的理论 - 在创建活动时创建后台线程时,使用活动引用的回调,如果活动关闭,由于回调的硬引用,它会留在内存中,对吗?那么如何确保后台操作在活动关闭时停止执行?
问问题
158 次
3 回答
2
那时有你的Activity
工具onStop()
并谋杀你的后台任务。
于 2012-05-15T16:51:07.223 回答
0
当 Activity 完成时,android 将其所有视图引用设置为 null,然后将 Activity 引用设置为 null。此外,Android 假定 Activity 启动的线程可以毫无问题地被杀死。所以,线程会被杀死,但时间没有定义。在您的情况下,回调无关紧要,因为所有引用都将设置为 null。将没有人听回调。
自己杀死线程的最简单方法是将线程的代码执行保持在一个循环中。您可以在线程的每个循环上检查一个 volatile 布尔参数:
while (!threadStop) {
// Do stuff
}
在 onDestroy() 中,将此变量设为 true
于 2012-05-15T17:20:46.400 回答
0
你要onStop()
还是onDestroy()
?
离开 Activity,例如单击列表项或启动子活动将触发onPause()
,然后onStop()
当 Activity 完全不可见时。如果您关心内存,您应该考虑onDestroy()
在后台操作中实现它和/或使用 Weak/SoftReference 以防止泄漏。
于 2012-05-15T17:11:47.990 回答