2017-12-17 14 views
0

私はいくつかのフラグメントとメインアクティビティを持つアプリを持っています。私のフラグメントは、メインアクティビティ内のフレームレイアウトにコンテンツを表示するように設定されています。ビューポケベルのようなもの。onRestoreInstance状態Null in Fragment

各フラグメントはリストビューで構成されています。リストの内容をメインアクティビティに保存します。

アプリが一時停止すると(ユーザーが端末のホームボタンを押したとき)、アプリの値をバンドルに保存する必要があります。 何らかの理由で、ユーザーがアプリケーションを再開したときにonRestoreInstanceState()が呼び出されることはありません。その結果、私の変数の値は得られません。

ユーザーが別のアプリケーションから再開しようとするとアプリがクラッシュすることがあります。 これは、アプリが長時間バックグラウンドになっていたり、メモリが不足している場合にのみ発生します。

onRestoreInstanceState()または別のものを使用する必要がありますか? onRestoreInstanceState()をオーバーライドして手動で呼び出すことはできますか?

+0

保存されたインスタンスもあなたのonCreateとonCreateViewで渡されます...保存された状態をチェックしてみてください – Kushan

答えて

0

通常、このような場合、アンドロイドはアプリ全体のプロセスを殺します。

Androidは、あなたのスタックとすべてのフラグメントを再作成します。そうするとき、それはあなたがNULLかどうかのために、これらのバンドルを確認し、通常のバンドルを使用して、それから、あなたのデータを復元するのと同じようにそれらを使用することができ、あなたの

onCreate and onCreateView 

両方の内側に保存されたバンドルを通過しますので、それも賢いです。私は一般にsqliteの中に大きなリストを保存し、状態がバンドル内に保存されたかどうかを示すブール値フラグを保存するだけです。

バンドルには1MBの制限があり、これはアプリケーション全体の制限です。より新しいバージョンでは、api 24+と思うが、保存された状態がそれよりも大きければ、例外が発生する。以前はlogcatの中にログが記録されていました

関連する問題