在后台做一些事情然后更新 UI 很难在 Android 中正确实现。它只是设计得很糟糕。典型示例是从 Web 获取内容并显示结果的 AsyncTask。这有两个问题:
AsyncTask 有一个对 Activity 的引用(因为它需要更新它的 UI)。屏幕方向更改后,Activity 会重新启动。但是 AsyncTask 仍然引用旧的销毁 Activity,因此它不能更新新 Activity 的 UI。
这可能导致 OutOfMemoryException。想象一下,你有一个包含很多位图的 Activity 并启动了一些 AsyncTask。您按 BACK(活动已完成)但 AsyncTask 仍在运行,因为它引用了 Activity,所以带有位图的 Activity 仍在内存中。重复此操作(启动 Activity 和 BACK),您迟早会强制关闭。
这个可以解决,但是太复杂了。在一个 Activity 中,我有 3 个不同的 AsyncTask,它们中的每一个都可以同时在多个实例中运行。正确实施这一点令人沮丧。代码变得非常难以理解和调试。
蜂窝装载机能以某种方式解决这个问题吗?有没有办法在 Honeycomb 之前的 Android 版本中使用它们?