2013-03-25 5 views
20

Wiem, że podobne pytanie do tego zadawano wiele razy, a surfowanie po SO częściowo znalazłem odpowiedź, ale nie kompletną, a androidy naprawdę nie pomagają. Oczywiście wiem już, jak działają i często korzystały z preferencji współdzielonych, ale zastanawiam się, w jakim punkcie (ile) jest za dużo, czytałem, że ludzie mieli ~ 100 KB przechowywanego bez żadnego problemu. Krótka historia - Czy ktoś rzeczywiście miał problemy ze zbyt dużą ilością danych przechowywanych we współdzielonych preferencjach i co było problemem, czy dane zostały usunięte lub?"Preferencje współdzielone"

** to tylko kwestia z ciekawości, mam już duże wartości przechowywane w SQL DB, tylko zastanawiał się, co będzie, a jeśli nie będzie żadnych problemów, jeśli ktoś z jakiegoś powodu wszystko przechowywanych w udostępnionych preferencji

+0

Wiem, do czego są używane i kiedy, po prostu zastanawiam się, jakie problemy mogą powodować, jeśli są używane zbyt wiele. –

+1

SharedPreferences są używane głównie do przechowywania niektórych pierwotnych typów danych i nie sądzę, że istnieje ograniczenie. Jeśli naprawdę chcesz wiedzieć, że musisz szukać "Maksymalna ilość przechowywanych danych aplikacji na Androida", to wątpię, że znajdziesz odpowiedź na temat SharedPreferences – Droidman

+0

dzięki Maver1ck, złe wyszukiwanie maksymalnej ilości danych przechowywanych w aplikacji Android –

Odpowiedz

35

Od SharedPreferences są przechowywane w pliku XML, a zatem brakuje silnej obsługi transakcji SQLite, nie polecam przechowywania "100 KB" w SharedPreferences.

Zgodnie z powyższym, najniższym limitem rozmiaru, o którym wiem, będzie Twoja ilość wolnego miejsca na sterty, ponieważ SharedPreferences odczytuje całą zawartość pliku XML do pamięci.

+7

Dobrze wiedzieć o wielkości sterty. Jednak nie sądzę, żebym miał tak duże pliki xml. Zastanawiam się, dlaczego w pierwszej kolejności są to xml, a nie pliki binarne (lub json). –

+0

Hej #CommonsWare! Masz na myśli przechowywanie łańcucha o wielkości około 100 kb nie jest dobrym pomysłem? –

8

Odczytując twoje pytanie uważam, że nie powinieneś używać SharedPreferences, ponieważ (a) są one przeznaczone do przechowywania znacznie mniejszych ilości danych (stąd użycie XML) i (b) istnieje wiele prostych alternatyw .

Jedyną rzeczą "wyjątkową" dotyczącą SharedPreferences jest integracja z działaniem Preferences w celu pokazania preferencji użytkownika i prawdopodobnie nie ma to zastosowania w danym przypadku w oparciu o kwotę, którą planujesz przechowywać. (Och, również SharePreferences obsługuje dla ciebie problemy z współbieżnością.)

Można użyć serializacji Java do przechowywania klas Preferencji w plikach binarnych. Będą one znacznie mniejsze niż porównywalne PreferenceFile i mogą być łatwo przekazywane za pomocą GZIPInputStream, aby zmniejszyć (lub CipherInputStream), aby je zaszyfrować. Znalazłem ten alternatywny, aby być potężnym, prostym i wieloplatformowym sposobem przechowywania danych aplikacji, w których moc SQLite nie jest potrzebna.

(Niestety nie jest to bezpośrednia odpowiedź.)

8

Jest tam ograniczenia danych SharedPreference. W moim przypadku spowoduje wyjątek pamięci, gdy dane SharedPreference przekraczają 1428.51-kb.

Lepiej więc użyć bazy danych SQLite, gdy potrzebujesz ogromnych danych do przechowywania.

+0

false statement. proszę przestańcie kopiować i wklejać to we wszystkich pytaniach, to zostało udowodnione, że jest błędne i niedokładne – SolidSnake