Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android、AsyncTask、长时间运行的进程和方向更改_Android - Fatal编程技术网

Android、AsyncTask、长时间运行的进程和方向更改

Android、AsyncTask、长时间运行的进程和方向更改,android,Android,在过去,方向更改和异步任务(以及其他长时间运行的后台任务)并没有很好地相互配合。始终存在一个问题,即知道新创建的活动中仍在运行哪些任务(或线程)(通过方向更改),以及在未附加活动的情况下任务结束时该怎么办 即使使用Fragments和LoaderManager,这对我来说仍然是个问题 现在,管理任意长时间运行的任务和方向更改的首选方式是什么?了解新创建的活动中正在运行的任务。确保任务在未附加活动时不会尝试传递其信息 谢谢一如既往:使用服务。从您的服务广播事件,并在您的活动(或某些中间层)中捕获它

在过去,方向更改和异步任务(以及其他长时间运行的后台任务)并没有很好地相互配合。始终存在一个问题,即知道新创建的活动中仍在运行哪些任务(或线程)(通过方向更改),以及在未附加活动的情况下任务结束时该怎么办

即使使用Fragments和LoaderManager,这对我来说仍然是个问题

现在,管理任意长时间运行的任务和方向更改的首选方式是什么?了解新创建的活动中正在运行的任务。确保任务在未附加活动时不会尝试传递其信息


谢谢

一如既往:使用服务。从您的服务广播事件,并在您的活动(或某些中间层)中捕获它们。然后,您的活动可以根据其状态选择如何处理这些事件


这是一个相当广泛的问题

在我的程序中,我刚刚

 android:configChanges="orientation|keyboardHidden|keyboard"

在我的活动清单中,我必须完成它。一年后,我没有遇到任何问题。

正如其他帖子所建议的,你可以使用android:configChanges=xxx

但是,这并不总是理想的。Android的设计目的是消除配置更改时的活动,并创建新的活动,在某些情况下,通过提供替代屏幕布局,您可能会从中受益。 例如,在多窗格应用程序中,横向显示的视图与纵向显示的视图不同,这是有意义的

回到你们的问题:我并没有读到处理长时间运行操作的首选方法,但根据自己的经验,我建议将此类任务存储在持久活动状态(在OnRetainonConfiguration实例/onCreate中保存/还原),或者使用持久片段

如果您的活动检测到某个任务已在运行,它可以给它机会重新创建对话框以显示其进度


注意:方向的改变并不是唯一可以让你的活动被重新创建的因素。为语言变化、对接和其他可能性做好准备:)但方向变化仍然是最常见的。我建议你重写你的问题,在你不是真正的“过程”而是其他意思的地方替换“过程”。操作系统进程有一个非常具体的定义,这个定义会使您的问题毫无意义(例如,进程不传递信息,活动不创建进程)。您自己如何处理配置更改?我发现在清单中包含该定义会导致活动不被重新创建,这样就解决了你所有的问题。我本来打算亲自研究处理,但在实践中发现没有必要。它的工作原理与你期望的一样。我总是偏离这一点,因为它似乎比我想要的更复杂。你是对的,它似乎按照我的意愿工作。我有一些相当复杂的事情,如果出了什么问题,那将是可怕的,而且到目前为止还不错:谢谢,先生,这比我想象的要容易得多。我不认为这是服务应该解决的问题。如果您的应用程序没有独立于活动生命周期的任务,那么服务将只是一种资源浪费。当活动未连接时,持久化片段仍然有可能尝试交付结果。OnRetainOnConfiguration实例无法存储(例如)活动网络连接。这里的问题不是存储配置更改的状态,而是确保在未连接活动时未传递数据,或者确保未尝试将数据传递给死机活动