3

アクティビティの状態の動作を保存したい場合、ドキュメントには、OnSaveInstanceStateとOnReceiveInstanceStateを実装する必要があると書かれています。

これにより、破棄または再起動した後でもアクティビティ状態が保存されると言われています。私は破壊にもっと関心があります(アクティビティは完全になくなりました)、それはバンドルが永続的であると見なされることを意味しますか?

PDFリーダーを開いて、それを閉じてもう一度開くと、同じページで開くことがわかります。これは、バンドルまたはその他を使用して実装されていますか?

4

6 に答える 6

2

永続的なアプリケーションデータを保存するには、共有設定を使用します。共有設定は、永続的に保存されるデータ値のセットです。永続性とは、アプリケーションのライフサイクルイベント全体で永続化するデータのことです。つまり、データを失うことなく、アプリケーション(またはデバイス)を開始および停止できます。次回ユーザーがアプリケーションを起動したとき、そのデータは引き続き利用できます。一部のゲームでは、たとえば、到達したゲームのレベル、プレーヤーの名前を保存するために共有設定を使用しています... Android Preference APIの使用方法については、このリンクを参照してください

好みはバンドルに似ていますが、それらは永続的であり、バンドルはそうではありません!! 永続データを保存する必要がある場合は、次の4つのオプションがあることに注意してください。

  1. 共有設定の使用
  2. SQLiteデータベースの使用
  3. 内部ストレージの使用
  4. 外部ストレージの使用

バンドルは永続的ではなく、ドキュメントにはそれを当てにしないと記載されています。onSaveInstanceState()は、アクティビティがシステムによって強制終了されようとしているときに呼び出されますが、既知の再起動(たとえば画面の回転)の場合に呼び出されます。アクティビティが強制終了された場合システムはより多くのリソースを必要とするため(アクティビティがバックグラウンドにある間)、onSaveInstanceState()は呼び出されませんが、onPause()は呼び出されます。onSaveInstanceState()は、ドキュメントに記載されているように、永続データを保存することを意図したものではありません。

于 2012-06-23T00:51:31.130 に答える
1

バンドルは永続的ではなく、それらのドキュメントでは、内部形式がデバイス間またはOSバージョン間で変更される可能性があるため、永続化にバンドルを使用することはお勧めできません

一方、SharedPreferencesは永続化でき、現在のアプリの状態などの情報を保存するための推奨される方法です。

于 2012-06-23T00:39:31.180 に答える
1

SavingActivityStateからのいくつかの関連部分 :

注:アクティビティが破棄される前にonSaveInstanceState()が呼び出される保証はありません。これは、状態を保存する必要がない場合があるためです(たとえば、ユーザーが[戻る]ボタンを使用してアクティビティを終了した場合など)。ユーザーは明示的にアクティビティを閉じています)。

特にユーザーがアプリを終了した場合、データが保存される保証はありません。

注: onSaveInstanceState()の呼び出しは保証されていないため、アクティビティの一時的な状態(UIの状態)を記録するためにのみ使用する必要があります。永続データの保存には使用しないでください。代わりに、onPause()を使用して、ユーザーがアクティビティを離れたときに永続データ(データベースに保存する必要があるデータなど)を保存する必要があります。

したがって、K-balloが言ったように、保存する永続データがある場合はSharedPreferencesを使用しました。 onSavedInstanceState()UI関連のデータを保存するのに主に役立ちます。

于 2012-06-23T00:47:50.100 に答える
1

永続的と見なすこともできますがSavedInstanceState()、呼び出されることが保証されておらず、作成者自身によって推奨されていないため、アプリケーション関連のデータを永続的に保存するために使用することはお勧めしません。

したがって、ユーザーインターフェイスの状態の変更(背景色、現在選択されているアイテムなど)を保存するためにのみ使用し、SharedPreferences、Files、SQLiteなどの他の永続化方法を使用します。

于 2012-06-23T01:03:33.067 に答える
0

他のすべての人が共有設定を使用することを推奨しているため、onDestroyとonSavedInstanceの両方でこの保存を行う必要があります。

androidのメモリが不足すると、onDestroyなどを呼び出さずにアプリケーションを強制終了してonSavedInstanceを呼び出します。コンテキストをバンドルに保存してonSavedInstanceに渡します。アプリが再びフォアグラウンドになると、Androidがアクティビティのバックスタックの復元を処理します。ただし、今回は、アクティビティごとにonCreateのバンドルが渡されます。このバンドルには、アプリが強制終了されている間にonSavedInstanceに保存したすべての値が含まれます。

お役に立てれば。

于 2012-06-23T01:00:39.853 に答える
0

簡単な答え:それは永続的ではありません。

長い答え:「Androidプログラミング-ビッグナードランチガイド」から:

onSaveInstanceState(...)が呼び出されると、データはBundleオブジェクトに保存されます。そのバンドルオブジェクトは、OSによってアクティビティのアクティビティレコードに詰め込まれます

..。

では、活動記録はいつ嗅ぎ取られるのでしょうか?ユーザーが[戻る]ボタンを押すと、アクティビティは実際に破壊されます。その時点で、アクティビティレコードは破棄されます。アクティビティレコードも通常、再起動時に破棄され、長期間使用されない場合は破棄されることもあります。

于 2014-09-20T03:42:56.427 に答える