Android 带异步任务的片段交换

Android 带异步任务的片段交换,android,android-asynctask,android-fragments,Android,Android Asynctask,Android Fragments,我的应用程序使用片段以纵向模式显示列表视图,或以横向模式并排显示列表视图和“详细信息”视图。我在ActionBar中还有一个启动异步任务的菜单项。问题是,如果用户在AsyncTask运行时将其显示从纵向旋转到横向(反之亦然),则AsyncTask将被终止。为了修复AsyncTask停止,我将configChanges属性添加到AndroidManifest中: <activity android:name="ListingFragment" android:configChange

我的应用程序使用片段以纵向模式显示列表视图,或以横向模式并排显示列表视图和“详细信息”视图。我在ActionBar中还有一个启动异步任务的菜单项。问题是,如果用户在AsyncTask运行时将其显示从纵向旋转到横向(反之亦然),则AsyncTask将被终止。为了修复AsyncTask停止,我将configChanges属性添加到AndroidManifest中:

    <activity android:name="ListingFragment" android:configChanges="keyboardHidden|orientation" />


但是,添加该属性会阻止片段自动切换到横向/纵向视图。有没有办法让片段自动切换视图而不终止AsyncTask?

在终止活动之前,您需要保存AsyncTask的实例。您可以使用来保存它。然后,在oncreate中,可以使用
getLastCustomNonfigurationInstance()
检索它。然后在onCreate中,您可以再次将活动“附加”到asynctask。

我认为OnRetainCustomOnConfigurationInstance()已被弃用,文档中说使用setRetainInstance()的目的不同。如果调用
setRetainInstance(true)
,这意味着片段实例不会随活动一起销毁,它将被保留(传递),新活动将获得该片段,而不是创建新片段。尽管
onRetain…
已被弃用,但我不知道他们提供了另一种通过活动destroy create cycles保存对象实例的方法。很高兴知道。然后我将使用onRetainStatonConfiguration()。谢谢你的回复。另外请注意,如果你想把你的碎片放在后台,你不能使用setRetainInstance