根据 Android API 文档,Activity.onRetainNonConfigurationInstance()已被弃用,取而代之的是Fragment.setRetainInstance()。
但是,我遇到了两种不同的情况,其中 Fragment.setRetainInstance() 似乎不可行。
如果 Fragment 包含 WebView。根据Diane Hackborne的说法,您不能在配置更改时重复使用 WebView。我猜这意味着您需要允许 Fragment 在屏幕旋转时拆除并重新创建 WebView,并使用WebView.saveState()和WebView.restoreState()来恢复 Web 视图状态。
如果 Fragment 属于配置更改后不再存在的布局,当 FragmentManager 尝试恢复 Fragment 时,会抛出:
java.lang.IllegalArgumentException: No view found for id 0x7f060091 for fragment
这可能会发生(例如),如果您在横向模式下有两个片段布局,但在纵向模式下有一个片段布局。从横向旋转到纵向时,如果 setRetainInstance() 设置为 true,则两个 Fragment 都不会被破坏,但一个 Fragment 不再具有要重新附加的有效视图,因此会出现异常。
因此,如果您正在构建基于 Fragment 的应用程序,并且您需要在配置更改之间保留数据(例如对运行 AsyncTasks 的引用),并且您不能使用Fragment.setRetainInstance(),并且没有 Fragment.onRetainNonConfigurationInstance (),最好的方法是什么?