2

それがどのように機能するかを誤解している可能性がありますが、何か奇妙なことが起こっています。

メインのアクティビティは「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 がタブホストを持ち、コードで設定されている通常のアクティビティです。

4

0 に答える 0