web-dev-qa-db-ja.com

共有設定「制限」

私はこれに似た質問が何度も尋ねられていることを知っており、SO私は部分的に答えを見つけましたが、完全ではありません、そしてAndroid docs don明らかに、私は彼らがどのように機能し、以前に共有設定を使用したことがあるかは知っていますが、どの時点(いくつ)が多すぎるのか疑問に思っています。短い-誰かが共有設定に保存されているデータが多すぎるという問題を実際に抱えていましたか?問題は何ですか?データは削除されますか?

**これは好奇心からの質問に過ぎません。SQLDBには既に大きな値が保存されています。何らかの理由で誰かがすべてを共有設定に保存した場合、何が問題になるのでしょうか

32

SharedPreferencesはXMLファイルに格納されているため、SQLiteの強力なトランザクションサポートがないため、SharedPreferencesに「100KBS」を格納することはお勧めしません。

そうは言っても、SharedPreferencesはXMLファイルのコンテンツ全体をメモリに読み込むため、私が知っている最小のサイズ制限は空きヒープ領域の量になります。

44
CommonsWare

あなたの質問を読むことから、SharedPreferencesを使用するべきではないと思います。なぜなら、(a)はるかに少ない量のデータを保存することを意図しているため(XMLの使用)、および(b)多くの単純な代替手段があるからです。

SharedPreferencesの「特別な」唯一のことは、ユーザーに設定を表示するためのPreferencesアクティビティとの統合です。これはおそらく、保存する予定の金額に基づいて、このケースには適用されません。 (ああ、SharePreferencesも並行処理の問題を処理します。)

Javaのシリアル化を使用して、Preferenceクラスをバイナリファイルに格納できます。これらは、同等のPreferenceFileよりも劇的に小さく、GZIPInputStreamを介して簡単に渡して暗号化するために小さく(またはCipherInputStream)できます。この代替手段は、SQLiteの力が必要ない場合にアプリデータを保存するための強力でシンプルなクロスプラットフォームの方法であることがわかりました。

(申し訳ありませんが、これは直接的な答えではありません。)

10
Tom

SharedPreferenceデータには制限があります。私の場合、SharedPreferenceデータが1428.51-kbを超えると、メモリ例外がスローされます。

したがって、保存するために巨大なデータが必要な場合は、SQLiteデータベースを使用する方が適切です。

10
mani