android - Honeycomb Loader 能否解决 AsyncTask + UI 更新的问题?

标签 android android-3.0-honeycomb android-loader

在后台执行某些操作然后更新 UI 很难在 Android 中正确实现。它的设计很糟糕。典型的例子是一个 AsyncTask,它从网络上获取一些东西并显示结果。这有两个问题:

  1. AsyncTask 具有对 Activity 的引用(因为它需要更新其 UI)。屏幕方向更改后, Activity 将重新启动。但是 AsyncTask 仍然引用旧的已销毁 Activity,因此它无法更新新 Activity 的 UI。

  2. 这会导致 OutOfMemoryException。想象一下,您有一个包含大量位图的 Activity 并启动了一些 AsyncTask。您按 BACK(Activity 已完成)但 AsyncTask 仍在运行,并且因为它引用了 Activity,所以带有位图的 Activity 仍在内存中。重复此操作(启动 Activity 并返回),您迟早会强制关闭。

这可以解决,但是太复杂了。在一个 Activity 中,我有 3 个不同的 AsyncTasks,每个 AsyncTasks 都可以同时在多个实例中运行。正确实现这一点令人沮丧。代码变得非常难以理解和调试。

可以Honeycomb Loaders以某种方式解决这个问题?有没有办法在 Honeycomb 之前的 Android 版本中使用它们?

最佳答案

是的,根据我使用 Loader 的经验,它们似乎解决了人们在 AsyncTasks 和配置更改方面遇到的常见问题。

我认为 Google 说 fragment 静态库也将包含 Loaders,所以是的,当库发布时它们也应该向后工作。

关于android - Honeycomb Loader 能否解决 AsyncTask + UI 更新的问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5097565/

相关文章:

Android:Android Studio 中的编译器警告

java - 如何在Fragment中实现Loader?

android - Honeycomb ActionBar & 电话应用程序

Android 无法解包 Honeycomb 上的位图错误

android - Android Honeycomb 中的加载程序

android - 加载程序在 Activity 启动时重新启动混淆

Android: canvas.drawBitmap 性能问题

android - Gradle同步失败: Cause: failed to find target with hash string 'android-22'

java - 将java位图像素传递给jni的最快方法

android - 键盘布局隐藏android操作栏?