屏幕方向期间片段内的异步任务

时间:2014-03-11 08:34:11

标签: android asynchronous android-fragments android-asynctask screen-orientation

如何在屏幕显示期间保留异步任务。 我搜索了很多,但没有找到任何优雅的解决方案。

我的问题是什么::

  1. 我有不同的肖像和布局布局横向所以不能使用android:configChanges="keyboardHidden|orientation|screenSize"来限制 活动娱乐。

  2. 我无法使用Fragment.setRetainInstance(boolean),因为我有嵌套片段所以我要将片段添加到后台堆栈 使用addToBackStack()

    在这种情况下:

    onCreate()onDestroy()未被调用。这在API文档中提到。

    onSaveInstanceState()未收到从onCreateView()传来的捆绑。传入的Bundle为null。 所以我不会得到activity

  3. 的已保存实例

    如何在片段中保留异步任务以避免因方向更改而崩溃。

    还是有其他方法可以执行异步任务。

2 个答案:

答案 0 :(得分:0)

如果您不能使用片段的保留实例,则应使用Service or an IntentService来运行您的任务。服务的想法是它使处理独立于Activity中发生的事情。因为您没有说出有关任务工作的问题,请确定哪一个最适合您的应用程序。

在Activity中运行AsyncTask通常是一个坏主意,因为系统可以销毁Activity或者方向更改时。现在有很多工作要解决这个问题,比如保留Fragment方法。但是这些都有一些缺点,比如你注意到的onSaveInstanceState()点。并且所有的解决方法都处理相同的事情:保持参考。

我不知道为什么使用服务并不是很受欢迎,这是运行异步任务(任何类型)的最简单方法,而不会在考虑如何保存对它的引用时遇到麻烦。

答案 1 :(得分:0)

或者,您可以尝试在自己的任务中启动AsyncTask(请参阅Intent.FLAG_ACTIVITY_NEW_TASK),以使其生命周期独立于被销毁的Activity,然后重新创建。

然后,您可以使用Handler进行通信,以检索结果和/或进度。