在后台执行某些操作然后更新 UI 很难在 Android 中正确实现。它的设计很糟糕。典型的例子是一个 AsyncTask,它从网络上获取一些东西并显示结果。这有两个问题:
AsyncTask 具有对 Activity 的引用(因为它需要更新其 UI)。屏幕方向更改后, Activity 将重新启动。但是 AsyncTask 仍然引用旧的已销毁 Activity,因此它无法更新新 Activity 的 UI。
这会导致 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/