如何在屏幕显示期间保留异步任务。 我搜索了很多,但没有找到任何优雅的解决方案。
我的问题是什么::
我有不同的肖像和布局布局横向所以不能使用android:configChanges="keyboardHidden|orientation|screenSize"
来限制
活动娱乐。
我无法使用Fragment.setRetainInstance(boolean)
,因为我有嵌套片段所以我要将片段添加到后台堆栈
使用addToBackStack()
在这种情况下:
onCreate()
和onDestroy()
未被调用。这在API文档中提到。
onSaveInstanceState()
未收到从onCreateView()
传来的捆绑。传入的Bundle为null。
所以我不会得到activity
如何在片段中保留异步任务以避免因方向更改而崩溃。
还是有其他方法可以执行异步任务。
答案 0 :(得分:0)
如果您不能使用片段的保留实例,则应使用Service or an IntentService来运行您的任务。服务的想法是它使处理独立于Activity中发生的事情。因为您没有说出有关任务工作的问题,请确定哪一个最适合您的应用程序。
在Activity中运行AsyncTask通常是一个坏主意,因为系统可以销毁Activity或者方向更改时。现在有很多工作要解决这个问题,比如保留Fragment方法。但是这些都有一些缺点,比如你注意到的onSaveInstanceState()
点。并且所有的解决方法都处理相同的事情:保持参考。
我不知道为什么使用服务并不是很受欢迎,这是运行异步任务(任何类型)的最简单方法,而不会在考虑如何保存对它的引用时遇到麻烦。
答案 1 :(得分:0)
或者,您可以尝试在自己的任务中启动AsyncTask
(请参阅Intent.FLAG_ACTIVITY_NEW_TASK
),以使其生命周期独立于被销毁的Activity
,然后重新创建。
然后,您可以使用Handler
进行通信,以检索结果和/或进度。