Что такое лучший способ сохранить большое количество состояния флажков в Android? - PullRequest
1 голос
/ 11 сентября 2010

У меня есть около 34 флажков для одного занятия, которые я должен отметить и снять. и я хочу сохранить статус каждого флажка.

Я хочу этого постоянно. Так я должен иметь таблицу sqlite или предпочтения?

Если рекомендуется таблица sqlite, то какой должен быть идеальный дизайн структуры таблицы?

1 Ответ

2 голосов
/ 11 сентября 2010

Вы можете сделать это, используя SQLite или настройки.Хотя ... то, что вы хотите сделать, довольно просто, так зачем вам заботиться о создании таблицы, создании SQliteOpenHelper объектов, проектировании таблицы и т. Д. Подход предпочтений проще.

Итак.... что здесь наиболее важно, так это то, как вы определяете свои флажки.Если у вас есть только 34 статических флажка (то есть они не изменят свой порядок), и они находятся в массиве (что было бы идеально), у вас все просто.

Как вы, возможно, знаете, редактор предпочтений неразрешить сохранять массивы.Таким образом, у вас есть несколько вариантов:

  • Сохранение каждого состояния в другой предпочтительный слот (например: putBoolean("checkbox2", true); putBoolean("checkbox3", false); т. Д.)
  • Сохранение всех состояний в строку: putString("checkboxes_state", "10101011100011010");таким образом, у вас будет строка с 34 символами, каждый символ представляет состояние.
  • Если вы хотите повысить эффективность, вы можете представить все состояния с простым long, равным или ниже 17179869183. Например, putLong("checkboxes_state", 17179869183)будет означать, что все флажки выбраны (потому что его двоичное представление 1111111111111111111111111111111111).Дополнительные примеры:
    • 12159999103 = 1011010100110010101101110001111111
    • 1 = 0000000000000000000000000000000001, что означает, что выбран только последний флажок.

Редактировать

Что касается вашего вопроса о том, почему последний является более эффективным, позвольте мне кратко объяснить.Первый подразумевает использование 34 слотов настроек (на самом деле я не знаю, как они хранятся; надеюсь, команда Android позаботилась о производительности).Второй подход будет использовать строку из 34 символов;поэтому минимальный размер объекта String составляет:

minimum String memory usage (bytes) = 8 * (int) ((34 * 2 + 45) / 8) = 113 bytes

Это означает, что строка такого удлинения займет не менее 113 байт .С другой стороны, использование только одного long займет всего 8 байт .Чем меньше байт для работы, тем быстрее будет работать ваше приложение (поскольку Android придется обрабатывать и сохранять меньше байтов).

...