过去,方向更改和AsyncTask(以及其他长时间运行的后台任务)彼此之间的效果不佳。一直存在的问题是,知道哪些任务(或线程)仍然在新创建的活动中运行(来自方向更改),以及在未附加活动时任务结束时该怎么做。
即使使用Fragments和LoaderManager,这对我来说似乎仍然是一个问题。
目前,管理任意长时间运行的任务和方向更改的首选方法是什么?了解新创建的活动中正在运行的任务。确保任务在未附加活动时不会尝试传递信息。
谢谢
答案 0 :(得分:4)
在我的程序中,我只是把
android:configChanges="orientation|keyboardHidden|keyboard"
在我的清单活动中,并完成它。 1年后我遇到了0个问题。
答案 1 :(得分:0)
正如其他帖子所暗示的那样,你可以使用android:configChanges = xxx。
但是,这并不总是需要的。 Android旨在消除配置更改活动,并创建新活动,在某些情况下,您可以通过提供替代屏幕布局从中受益。 这在多窗格应用程序中是有意义的,其中横向方向显示的视图与纵向方向不同。
所以回到你的问题:我没有读到处理长时间运行操作的首选方法,但根据自己的经验,我建议将此类任务存储在持久活动状态(在onRetainNonConfigurationInstance / onCreate中保存/恢复),或使用持久性碎片。
如果您的活动检测到某个任务已在运行,则可以重新创建对话框以显示其进度。
请注意:orienation更改不是唯一可以重新创建活动的方法。为语言变化,对接和其他可能性做好准备:)但是,方向变化仍然是最常见的。
答案 2 :(得分:-1)
它与以往一样:使用服务。从您的服务广播事件并在您的活动(或某个中间层)中捕获它们。然后,您的活动可以根据其状态选择如何处理这些事件。
这是一个相当广泛的问题。