Android API のドキュメントによると、Activity.onRetainNonConfigurationInstance()はFragment.setRetainInstance()を支持して廃止されました。
ただし、Fragment.setRetainInstance() を使用できないと思われる 2 つの状況に遭遇しました。
フラグメントに 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
これは、(たとえば) 横向きモードで 2 フラグメントのレイアウトがあり、縦向きモードで 1 つのフラグメントのレイアウトがある場合に発生する可能性があります。横向きから縦向きに回転するとき、setRetainInstance() が true に設定されている場合、どちらの Fragment も破棄されませんが、1 つのフラグメントに再アタッチする有効なビューがなくなるため、例外が発生します。
そのため、フラグメントベースのアプリケーションを構築していて、構成の変更間でデータ (実行中の AsyncTasks への参照など) を保持する必要があり、Fragment.setRetainInstance()を使用できず、 Fragment.onRetainNonConfigurationInstance がない場合()、とるべき最善のアプローチは何ですか?