10

Androidアプリケーションのアプリケーションクラス(シングルトン)に保存されたデータを保存する最良の方法は何ですか?

アクティビティ間で多くのデータを共有する静かな大きなアプリがあります。したがって、そのほとんどはアプリケーション シングルトンに格納されます。

それはすべてうまく機能します..アプリケーションがOSによってメモリ不足で強制終了されます...その後、アプリケーションに以前あった必要なデータが不足しているため、アプリケーションが成功せずにアクティビティを再開しようとします。

あなたの経験によると、アプリケーションにデータを保存するための非常に高く評価されている(そして必要とされている)方法がないため、最良のアプローチは何ですか?

「通常の」文字列、ブール値などの他に、ビットマップなどを保存できますか?

私はすでにこれを見ました Androidでグローバル変数を宣言する方法? しかし、問題は、この場合に重要なこと、メモリ不足のためにアプリケーションが強制終了されたときにデータを保存する方法に焦点を当てていません...

4

3 に答える 3

18

多くの質問と同様に、簡単な答えはありません。データを保存するには多くの方法があり、それぞれに長所と短所があります。「最良の」アプローチは、特定のニーズによって異なります。ここにすべてのオプションがあります: http://developer.android.com/guide/topics/data/data-storage.html

  • いくつかの小さなビットマップについては、それらをエンコードしてSharedPreferencesに保存することができます。
  • より多くの大きな画像の場合、2 つのオプションがあります
    1. データベース内の BLOB 列
    2. それらを内部ストレージにファイルとして保存し、リンクを設定に保管してください。

SharedPreferencesは文字列を格納するため、シリアル化/エンコードされたオブジェクトを含め、文字列であるすべてのものを格納できます。この投稿によると、SharedPreferences のシリアル化された文字列にはハードコードされたサイズ制限はありませんが、文字列のサイズ制限に基づいています。それにもかかわらず、この別の投稿では、SharedPreferences オブジェクト全体が単一の xml ファイルとして記述されているため、そのサイズを最小限に抑えるようにしてください。

JSON オブジェクト(または katit によって提案されているように GSON を使用する) は、優れた軽量オプションですが、私がとるアプローチは、それらを内部データ ストレージに保存することです (ただし、データが非常に大きく、つまり何メガバイトもあり、外部ストレージを好む場合を除きます)。 storage) を使用し、SharedPreferences にのみリンクを保持します。オブジェクトがどのように見えるかはわかりませんが、より単純なコンポーネントの束に減らすことができる場合は、それらのデータベースを検討できます (つまり、オブジェクトごとに 1 行、フィールドごとに 1 列、おそらくいくつかの blob を含む)。 .

ファイルとデータベースのアプローチは、それらのオブジェクトにアクセスする予定の回数にも依存します。ファイルが 1 回か 2 回だけ読み取られて消える場合は、データベースとそのカーソルの煩わしさよりもファイルを選択します。多くの読み取りがあり、おそらくクエリを使用してより高速な検索が必要な場合は、db を選択します。

アクティビティ固有のオプションについては、 http: //android-developers.blogspot.in/2009/02/faster-screen-orientation-change.htmlの投稿も確認してください。

于 2011-05-19T19:10:40.533 に答える
2

シングルトン クラスを使用して情報を保持している場合、アプリケーションが強制的に停止されると、情報が消去されることに注意してください。

共有設定の場合、情報は同じままです。

お役に立てれば。

于 2012-10-02T05:06:59.210 に答える
1

Javaシリアライザーがありますが、それが必要かどうかはわかりません。

私は個人的にそのすべてにGSONを使用しています。JSONを扱うGoogleライブラリです。オブジェクトを効率的な文字列表現にシリアル化できます。

私はこれを主に RESTful サービス通信に使用しましたが、オブジェクト表現を SQLLite などに保存するのに非常に適していることを知りました。このようにして、オブジェクトを非常に簡単に膨らませることができます。

于 2011-05-19T19:07:30.080 に答える