AsyncTask
是在另一个线程中运行复杂任务的好东西。
但是当 AsyncTask
仍在运行时发生方向更改或其他配置更改时,当前的 Activity
将被销毁并重新启动。当 AsyncTask
的实例连接到该 Activity 时,它会失败并导致“强制关闭”消息窗口。
所以,我正在寻找某种“最佳实践”来避免这些错误并防止 AsyncTask 失败。
到目前为止我看到的是:
- 禁用方向更改。(肯定不是你应该处理的方式。)
- 让任务存活并通过
onRetainNonConfigurationInstance
用新的 Activity 实例更新它
Activity
销毁时取消任务,Activity
再次创建时重新启动。- 将任务绑定(bind)到应用程序类而不是 Activity 实例。
- “货架”项目中使用的一些方法(通过 onRestoreInstanceState)
一些代码示例:
Android AsyncTasks during a screen rotation, Part I和 Part II
您能帮我找到最能解决问题且易于实现的最佳方法吗?代码本身也很重要,因为我不知道如何正确解决这个问题。
最佳答案
不要不使用 android:configChanges
来解决这个问题。这是非常糟糕的做法。
不要不使用Activity#onRetainNonConfigurationInstance()
。这不是模块化的,不适合基于 Fragment
的应用程序。
您可以read my article描述如何使用保留的 Fragment
处理配置更改。它很好地解决了在旋转更改中保留 AsyncTask
的问题。您基本上需要在 Fragment
中托管您的 AsyncTask
,在 Fragment
上调用 setRetainInstance(true)
,然后报告AsyncTask
的进度/结果通过保留的 Fragment
回到它的 Activity
。
关于android - 最佳实践 : AsyncTask during orientation change,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7128670/