猿问

最佳实践:方向更改期间的AsyncTask

最佳实践:方向更改期

AsyncTask 在另一个线程中运行复杂任务是一件好事。

但是当AsyncTask仍在运行时有方向更改或其他配置更改时,将Activity消除并重新启动当前电流。并且当实例AsyncTask连接到该活动时,它会失败并导致“强制关闭”消息窗口。

所以,我正在寻找某种“最佳实践”来避免这些错误并防止AsyncTask失败。

到目前为止我看到的是:

  • 禁用方向更改。(当然不是你应该如何处理它。)

  • 让任务存活并通过新的活动实例更新它 onRetainNonConfigurationInstance

  • 只需在销毁时取消任务,ActivityActivity在再次创建时重新启动它。

  • 将任务绑定到应用程序类而不是活动实例。

  • “shelf”项目中使用的一些方法(通过onRestoreInstanceState)

一些代码示例:

屏幕旋转期间的Android AsyncTasks,第一部分第二部分

ShelvesActivity.java

你能帮我找到最好的方法来解决问题并且易于实现吗?代码本身也很重要,因为我不知道如何正确解决这个问题。


猛跑小猪
浏览 338回答 3
3回答

慕斯王

千万不要使用android:configChanges来解决这个问题。这是非常糟糕的做法。千万不要使用Activity#onRetainNonConfigurationInstance()两种。这种模块化程度较低,不适合Fragment基于应用程序。您可以阅读我的文章,描述如何使用保留的Fragments 处理配置更改。它解决了保持AsyncTask旋转变化很好的问题。你基本上需要托管AsyncTask里面Fragment,叫setRetainInstance(true)上Fragment,报告AsyncTask的进度/结果返回给它Activity通过保留Fragment。
随时随地看视频慕课网APP

相关分类

Android
我要回答