【问题标题】: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 实例的引用,它的行为会有什么不同吗?

【问题讨论】:

    标签: android android-activity android-asynctask


    【解决方案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 了!
    猜你喜欢
    • 2016-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-23
    • 2021-09-05
    • 2012-03-22
    相关资源
    最近更新 更多