Общие настройки "предел"

Я знаю, что вопрос, подобный этому, задавали много раз, и, просматривая SO, я частично нашел ответ, но не полный, и документы по Android не очень помогают. Очевидно, я знаю, как они работают и использовали общие предпочтения много раз прежде, но мне интересно, в какой момент (сколько) это слишком много, я читал, что люди хранили ~ 100KBS без каких-либо проблем. Короче говоря - действительно ли у кого-то были проблемы со слишком большим количеством данных, хранящихся в общих настройках, и в чем была проблема, данные удалялись или?

** это просто вопрос из любопытства, мои большие значения уже хранятся в БД SQL, просто интересно, что будет и возникнут ли проблемы, если кто-то по какой-то причине сохранит все в общих настройках

3 ответа

Решение

Поскольку SharedPreferences хранятся в файле XML, и поэтому не имеют сильной поддержки транзакций SQLite, я бы не рекомендовал хранить "100 КБ" в SharedPreferences,

Тем не менее, самый низкий предел размера, который я знаю, будет вашим количеством свободного пространства кучи, так как SharedPreferences читает все содержимое этого XML-файла в память

Существует ограничение данных SharedPreference. В моем случае это выдает Исключение Памяти, когда данные SharedPreference пересекают 1428.51-kb.

Поэтому лучше использовать базу данных SQLite, когда для хранения требуются огромные данные.

Прочитав ваш вопрос, я думаю, что вам не следует использовать SharedPreferences, потому что (а) они предназначены для хранения гораздо меньших объемов данных (отсюда и использование XML), и (б) есть много простых альтернатив.

Единственное, что "особенного" в SharedPreferences - это интеграция с Preferences Activity для показа ваших предпочтений пользователю, и это, вероятно, не применимо в вашем случае, исходя из суммы, которую вы планируете хранить. (О, также SharePreferences решает проблемы параллелизма для вас.)

Вы можете использовать сериализацию Java для хранения классов предпочтений в двоичных файлах. Они будут значительно меньше, чем сопоставимый PreferenceFile, и их можно легко передать через GZIPInputStream, чтобы сделать его меньше (или CipherInputStream) для его шифрования. Я обнаружил, что этот альтернативный вариант является мощным, простым и кроссплатформенным способом хранения данных приложений там, где нет необходимости в SQLite.

(Извините, это не прямой ответ.)

Другие вопросы по тегам