0

所以这就是我的理论 - 在创建活动时创建后台线程时,使用活动引用的回调,如果活动关闭,由于回调的硬引用,它会留在内存中,对吗?那么如何确保后台操作在活动关闭时停止执行?

4

3 回答 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()在后台操作中实现它和/或使用 Wea​​k/SoftReference 以防止泄漏。

于 2012-05-15T17:11:47.990 回答