Android AsynchTask 在其调用 Activity 完成时工作

标签 android android-asynctask

AsynchTaskdoinBackground() 方法中时,我的 Activity 已完成。

当它到达 postExecute() 时,用于更新 UI 的 Activity 已经被销毁,但是它的 TextView 仍然可以在 onPostExecute() 中访问>.
谁能解释这是怎么发生的?

最佳答案

Android Activity 有一个特定的生命周期。当它们经过 Destroy 生命周期状态时,Android 不再可以使用它们,最终将被垃圾回收。

但是,当您将 Activity 引用或与此相关的任何小部件引用传递给 AsyncTask 时,这会阻止 GC 释放 Activity 及其相关对象(例如 View 和小部件)。此外,在具有自己状态的单独线程中执行的 AsyncTask 将持有一个或多个无效对象的引用。由于您在 AsyncTask 中持有引用,因此 GC 无法释放它们。

这就是为什么在将 AsyncTasks 与 Activity 引用一起使用时必须非常小心。另外,不要使用 AsyncTasks 来更新您的 UI,还有其他方法可以做到这一点。

关于Android AsynchTask 在其调用 Activity 完成时工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37456294/

相关文章:

android - 导入时出现 ClassNotFoundException。阿尔

android - 如何创建具有所需宽度和长度段数的网格/平面?

java - 有没有其他方法可以在不使用 webview 和 Html.fromHtml() 方法的情况下在 Android TextView 中显示 Html 代码?

java - 如何在不扫描所有 wifi 网络的情况下获取当前 wifi 连接的加密类型?

java - 无法在 asyncTask 的 onPostExecute 中将 json 字符串设置为 TextView

android - 静态异步任务进度条

android - 列出 SD 卡中的所有图像

java - Android asynctask 像 arargs 方法一样只能重写或被其他 varargs 方法重写

java - 如何使用 Robolectric 测试 AsyncTask?

java - AsyncTask 中没有任何方法被调用