Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.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
Java 保留片段数据而不保留片段_Java_Android_Multithreading_Android Fragments - Fatal编程技术网

Java 保留片段数据而不保留片段

Java 保留片段数据而不保留片段,java,android,multithreading,android-fragments,Java,Android,Multithreading,Android Fragments,我正在开发一个应用程序,它需要在后台进行大量计算。 为此,我从一个片段启动一个线程,并向其传递一个处理程序,这样它就可以将消息传递回去。当发生配置更改(屏幕旋转,…)时,Android会重新创建活动和片段。我正在寻找一种从新片段获取线程引用的方法,这样我就可以向它传递一个新的处理程序 保留整个片段对我来说不是一个选项,因为它在横向模式下使用不同的布局 我不能使用onRetainonConfiguration Instance(),因为它仅在活动上受支持,但我的线程存在于片段中 我不能使用onSa

我正在开发一个应用程序,它需要在后台进行大量计算。
为此,我从一个片段启动一个线程,并向其传递一个处理程序,这样它就可以将消息传递回去。当发生配置更改(屏幕旋转,…)时,Android会重新创建活动和片段。我正在寻找一种从新片段获取线程引用的方法,这样我就可以向它传递一个新的处理程序

保留整个片段对我来说不是一个选项,因为它在横向模式下使用不同的布局

我不能使用onRetainonConfiguration Instance(),因为它仅在活动上受支持,但我的线程存在于片段中

我不能使用onSaveInstanceState(),因为它只支持基本数据类型


在重新创建片段时,是否有其他方法可以保留对后台线程的引用?

我使用无头保留片段解决了这个问题,该片段管理线程

我的普通片段创建了一个无头片段的新实例,它被保留。无头片段有
start()
stop()
方法,它们依次启动和停止线程,还有
setHandler()
方法,用于更改传递给的处理程序消息。

每当重新创建非保留片段时,只需从FragmentManager获取保留片段,并使用新的处理程序调用
setHandler()

您可以使用android架构组件的ViewModel来执行此操作


如果有帮助,请检查:@DavidK使用异步任务,而我使用线程。根据文档,AsyncTask应该“理想情况下用于短期操作(最多几秒钟)”,而我的线程将持续运行,而活动正在运行。哦,我不知道这一点。然后检查其中一个正在进行的线程,如Executor和类似的线程。或者试着找到一些能很好地处理这个问题的库。不过我不确定。