在 AsyncTask 仍在后台运行的情况下,Activity.finish() 会发生啥?
Posted
技术标签:
【中文标题】在 AsyncTask 仍在后台运行的情况下,Activity.finish() 会发生啥?【英文标题】:What happens on Activity.finish() with AsyncTask still running in background?在 AsyncTask 仍在后台运行的情况下,Activity.finish() 会发生什么? 【发布时间】:2011-02-13 03:58:47 【问题描述】:当 AsyncTask 仍在后台运行时,Activity.finish() 会发生什么?
它是否只是将 Activity 从 Activity Stack 中弹出,但等待销毁 Activity 对象直到 AsyncTask 完全完成(因为 AsyncTask 是我的 Activity 的内部类)?
另外,如果 AsyncTask 是一个公共的、非内部的类,它不包含对 Activity 实例的引用,它的行为会有什么不同吗?
【问题讨论】:
【参考方案1】:我用线程尝试过同样的事情,我的观察是它一直在运行线程。
【讨论】:
是的,AsyncTask
将继续运行直到完成。它将保留对Activity
的引用,防止Activity
被垃圾收集......除非它是一个静态内部类或完全独立的类,没有引用Activity
或任何指向Activity
(例如,View
)。
@CommonsWare 但是,如果在 UI 线程上运行的 AsyncTask
方法之一被调用并操纵 Activity 的 UI 视图,调用像 findViewById(R.id.something_in_the_activity_layout)
这样的 Activity 方法会发生什么?它仍然有效还是静默失败?
@GianniCostanzi:这无法抽象地回答,抱歉。
@CommonsWare 我试图在一个新问题here 中更好地解释我的问题
@Gianni 您是否根据上次评论打开了一个新问题。讨论进入了一个有趣的边缘,但在那之后就没有 cmet 了!以上是关于在 AsyncTask 仍在后台运行的情况下,Activity.finish() 会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章
OnCreate 中的 AsyncTask 在运行时失败,如何在 Android 中避免这种情况?