在 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() 会发生啥?的主要内容,如果未能解决你的问题,请参考以下文章

运行并行 AsyncTask

OnCreate 中的 AsyncTask 在运行时失败,如何在 Android 中避免这种情况?

Android AsyncTask 与特定情况下的线程

Linux使用screen实现关闭ssh连接的情况下,让程序继续在后台运行

在任务仍在运行时返回结果

Android SQLite 更新无法在 AsyncTask 的后台运行