所以这是我的理论 - 当在活动创建时创建后台线程时,使用由活动引用的回调,如果活动已关闭,由于回调的硬引用,它会保留在内存中,我是对的吗?那么,如何在活动结束时确保后台操作停止执行?
答案 0 :(得分:2)
让你的Activity
实施onStop()
并在那时杀死你的后台任务。
答案 1 :(得分:0)
您想要onStop()
还是onDestroy()
?
离开活动,例如点击列表项或开始子活动将触发onPause()
,然后onStop()
当活动完全不可见时。如果您关注内存,则应考虑在onDestroy()
中实现内存和/或在后台操作中使用Weak / SoftReference以防止泄漏。
答案 2 :(得分:0)
当一个Activity完成后,android会将其所有视图引用设置为null,然后将Activity引用设置为null。此外,Android假定活动启动的线程可以被杀死而没有任何问题。因此,线程将被杀死,但时间未定义。在您的情况下,回调不重要,因为所有引用都将设置为null。没有人可以听回叫。
最容易自己杀死线程的方法是将线程的代码执行保持在循环中。你可以在你的线程的每个循环上检查一个volatile布尔参数:
while (!threadStop) {
// Do stuff
}
在onDestroy()中,将此变量设为true