それがどのように機能するかを誤解している可能性がありますが、何か奇妙なことが起こっています。
メインのアクティビティは「MainMenuActivity」で、そこからサブメニューを呼び出します。そこから、ユーザーはオプションを選択してデータを取得し、そのデータを拡大できます。
つまり、事実上、A -> B -> C -> D のチェーンがあります。
次に、電話をかけてアプリケーションを強制的に終了させます。logcat は、アプリケーションが停止していることを明確に示しています。アクティビティを再起動すると、アクティビティでタイムアウトが発生します。logcat は次のようになります。
10-21 14:42:06.018: I/ActivityManager(1156): Starting: Intent { cmp=com.applicat.meuchedet/.MenuScreenActivity (has extras) } from pid 22170
10-21 14:42:06.558: I/ActivityManager(1156): Displayed com.applicat.meuchedet/.MenuScreenActivity: +469ms
10-21 14:42:10.728: I/ActivityManager(1156): Starting: Intent { cmp=com.applicat.meuchedet/.PrescriptionsListScreen } from pid 22170
10-21 14:42:11.368: I/ActivityManager(1156): Displayed com.applicat.meuchedet/.PrescriptionsListScreen: +591ms
10-21 14:42:26.068: I/ActivityManager(1156): Starting: Intent { cmp=com.applicat.meuchedet/.MedicinePurchasesListScreen (has extras) } from pid 22170
10-21 14:42:26.758: I/ActivityManager(1156): Displayed com.applicat.meuchedet/.MedicinePurchasesListScreen: +624ms
10-21 14:43:11.288: I/ActivityManager(1156): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.applicat.meuchedet/.MainActivity bnds=[242,271][358,389] } from pid 21281
10-21 14:43:42.288: I/ActivityManager(1156): Process com.applicat.meuchedet (pid 22170) has died.
10-21 14:43:56.948: I/ActivityManager(1156): Start proc com.applicat.meuchedet for activity com.applicat.meuchedet/.MedicinePurchasesListScreen: pid=22483 uid=10106 gids={3003}
10-21 14:43:58.188: W/ActivityManager(1156): Force finishing activity com.applicat.meuchedet/.MedicinePurchasesListScreen
10-21 14:43:58.698: W/ActivityManager(1156): Activity pause timeout for HistoryRecord{40553fb8 com.applicat.meuchedet/.MedicinePurchasesListScreen}
10-21 14:44:07.308: W/ActivityManager(1156): Activity idle timeout for HistoryRecord{40553fb8 com.applicat.meuchedet/.MedicinePurchasesListScreen}
10-21 14:44:08.708: W/ActivityManager(1156): Activity idle timeout for HistoryRecord{409a4ad8 com.applicat.meuchedet/.PrescriptionsListScreen}
MenuScreenActivity は、上記の「B」です。PrescriptionsListScreen は「C」です。MedicinePurchasesListScreen は「D」です。
D に Log コマンドを追加しましたが、"onSaveInstanceState" および "onRestoreInstanceState" メソッドに到達しません。
「C」に戻って「onRestore」に戻ったようですが、バンドルにゴミがあります。ビュー構造は再構築されません。
ビューが再構築されていないため、「C」で NullPointerException が発生します。
そうでないことを確認するために、ビューの現在の内容の完全なツリーを出力する Log コマンドを追加しました。Cの「onSave」の前は問題ありませんが、「onRestore」が実行された後は空です。
私は間違いなく「onSave」と「onRestore」の「スーパー」を呼び出しています。
============================================
編集:「onSaveInstanceState」の最後と「onRestoreInstanceState」の開始時に、savedInstance の内容をログに記録しました。
これは私が得たものです。
保存:
onSaveInstanceState - Bundle = Bundle[{android:viewHierarchyState=Bundle[{android:views=android.util.SparseArray@40730568}], SavedData=com.applicat.meuchedet.MedicinePurchasesListScreen$MedicinePurchasesListScreen_SaveData@407c4ae0}]. contents = [android:viewHierarchyState, SavedData]
戻す:
onRestoreInstanceState - Bundle = Bundle[{android:viewHierarchyState=Bundle[mParcelledData.dataSize=5368], SavedData=com.applicat.meuchedet.PrescriptionsListScreen$PrescriptionsListScreen_SaveData@40563c60}]. contents = [android:viewHierarchyState, SavedData]
ご覧のとおり、「viewHierarchyState」バンドルは同じではありません。ただし、物事が機能する他の画面ではそうです。
この画面と他の画面の唯一の違いは、画面のコンテンツが TabHost であることです。ただし、これは TabActivity ではありません。これは、XML がタブホストを持ち、コードで設定されている通常のアクティビティです。