如果Asynctask正在运行,即使在finish()方法之后,活动仍将存活吗?

时间:2016-03-16 06:34:48

标签: android android-activity android-asynctask

  

从长远来看,AsyncTask会产生内存泄漏:如果AsyncTask持续存在   很长一段时间,它保持活动"活着"而Android想   摆脱它,因为它不能再显示。活动不可能   垃圾收集,这是Android的核心机制   保留设备上的资源。

这是否意味着如果我们调用finish()方法并且asynctask正在运行,那么活动将保持"活着"?如果没有,那么这意味着什么

  

如果AsyncTask持续很长时间,它会保持活动"活着"?

除非我们调用finish()方法或按回按钮,否则活动将处于活动状态。这是否意味着如果asyntask正在运行,那么即使在此之后活动仍然存在?

1 个答案:

答案 0 :(得分:11)

如果AsyncTask被声明为活动内部的非静态内部类,则意味着它始终拥有对创建它的封闭外部类的强引用。因此,只要AsyncTask正在运行,它就会保存对活动的强引用,这意味着即使在调用finish()并执行onDestroy()之后它也不会被垃圾收集。这是AsyncTask的一个非常常见的问题,没有正确实现以防止这种情况。