【问题标题】:If Asynctask is running will activity will be alive even after finish() method?如果 Asynctask 正在运行,即使在 finish() 方法之后,活动也会继续存在吗?
【发布时间】:2016-03-16 06:34:48
【问题描述】:

从长远来看,AsyncTask 会产生内存泄漏:如果 AsyncTask 持续 长期以来,它使活动保持“活跃”,而 Android 想要 摆脱它,因为它不再显示。活动不能 垃圾收集,这是 Android 的核心机制 保留设备上的资源。

这是否意味着如果我们调用 finish() 方法并且 asynctask 正在运行,那么活动也会保持“活动”?如果不是,那么这意味着什么

如果 AsyncTask 持续很长时间,它会保持活动“活动”吗?

除非我们调用finish() 方法或者我们按下返回按钮,否则Activity 将是活跃的。这是否意味着如果asyntask 正在运行,那么即使在那之后Activity 也会活跃?

【问题讨论】:

  • 我不太确定,但我的理解是,只要 asyncTask 正在运行并且系统不会自动完成,该活动就会保持活动状态。 android系统是一种“自我清理”机制,如果资源急需,它会杀死未使用的应用程序甚至正在运行的应用程序。但是,如果您完成活动,我认为该活动已被破坏,因为您直接自己调用它而不是从系统调用它。如果您按下后退按钮,则活动通常不会被破坏,除非您在 onBackButtonPress() 中调用 finish()。

标签: android android-activity android-asynctask


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-21
    • 2019-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-15
    • 2013-12-18
    相关资源
    最近更新 更多