这就是我的理论--在创建活动的后台线程时,使用活动引用的回调,如果活动关闭,由于回调的硬引用,它会留在内存中,对吗?那么,当activity关闭时,如何确保后台操作停止执行呢?
发布于 2012-05-16 00:51:07
让你的Activity实现onStop(),并在那个时候杀死你的后台任务。
发布于 2012-05-16 01:11:48
你想要onStop()还是onDestroy()?
离开该活动,例如单击列表项或启动子活动,将触发onPause(),然后在该活动完全不可见时触发onStop()。如果内存是您关心的问题,您应该考虑在onDestroy()中实现它和/或在后台操作中使用弱/SoftReference来防止泄漏。
发布于 2012-05-16 01:20:46
当活动完成时,android将其所有视图引用设置为null,然后将活动引用设置为null。此外,Android假设由该活动启动的线程可以毫无问题地被终止。因此,线程将被杀死,但时间没有定义。在你的情况下,回调并不重要,因为所有的引用都会被设置为null。就没有人会去听回调了。
自己杀死线程的最简单方法是将线程的代码执行保存在loop.You中,它可以有一个易失性的布尔参数,在线程的每个循环中都会检查该参数:
while (!threadStop) {
// Do stuff
}
在onDestroy()中,将此变量设为true
https://stackoverflow.com/questions/10605281
复制相似问题