Производительность/потребление памяти для сохранения информации в DB или prefs

Мне нужно сохранить много и переменное количество статусов флажков моего приложения для Android. Каждые 5-10 минут мне нужно получить статус одного флажка (который должен быть изменен путем взаимодействия с пользователем в другой деятельности).  Я знаю, что могу хранить их в sharedPreferences или в SQLite db. Число или флажки варьируются от 10 до (бесконечный-1) .

Моя первая идея состояла в том, чтобы сохранить все статусы в одной строке:

chk1:true,chk2:false,chk3:false,chk4:false,chk5:true

: и , . Я могу получить один единственный вызов getString() , все мои флажки stasus.

Я оставил это решение, потому что мои флажки растут в количестве, и я думаю, что он не выполняет одну строку с тысячами данных.

Моя вторая идея заключалась в том, чтобы хранить каждый chk в отдельных предпочтениях. Я оставил это решение, потому что причина, по которой мне нужно восстановить, может менять статус моих флажков. Представьте getString() , называемый 10000 или более раз, это пустая трата ресурсов.

Моя третья идея состоит в том, чтобы сохранить все отдельные статусы в SQLite db.

 ID   Status
  1      T
  2      F
  3      F
  4      F
  5      T

В этом решении мне не нравится, что мне нужно получить доступ к моей БД много времени.

Какое лучшее решение (производительность и потребление памяти), если мне нужно получить статус флажка каждые 5 минут отсюда до бесконечности? DB или sharedpref ? Если DB, мне нужно открывать каждый раз db и создавать экземпляр Cursor, или я должен создать экземпляр в начале моей активности?

0

1 ответы

Я бы обязательно пошел с SQLite.

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

Кроме того, SQLite особенно полезен, если ваша модель данных когда-либо изменяется (и, поверьте, это происходит постоянно). SQLite также будет кэшировать только некоторые наиболее используемые фрагменты ваших данных (технически: страницы базы данных) - он будет адаптироваться к фактическому шаблону использования ваших данных.

Что касается открытия БД - я бы определенно рекомендовал открыть его один раз и повторно использовать созданное соединение несколько раз - это избавит вас от накладных расходов при открытии базы данных каждый раз (что является дорогостоящей операцией), а также позволит SQLite учиться (адаптировать ) как кэшировать ваши данные на основе того, как вы на самом деле используете его (например, порядок доступа, конкретный кеш SQL-запросов и т. д.)

1
добавлено
Спасибо. Есть ли какой-либо отрицательный момент, чтобы открыть соединение с БД и никогда не закрывать его (никогда ~ 2-3 дня)?
добавлено автор StarsSky, источник
Нет, это живые обои, поэтому активность открыта и работает на переднем плане. Я попробую это решение.
добавлено автор StarsSky, источник
Самое главное - всегда грациозно закрыть все курсоры. остальное менее важно, но я просто предлагаю закрыть соединение onDestroy() вашего Activity только для того, чтобы быть в безопасности. сказав это, я сомневаюсь, что Android сохранит вашу деятельность долгое время (потому что она автоматически уничтожит ее, когда потребуется память), если ваша деятельность не останется на переднем плане все время, и в этом случае она действительно попытается вообще не уничтожить ее ,
добавлено автор andr, источник
насколько я знаю, это неверно - если пользователь уходит от Activity , у которого есть обои за ним, он определенно изменит его видимость и, возможно, даже уничтожит его для целей восстановления памяти. во всяком случае, удачи! :)
добавлено автор andr, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

Android Developers
Android Developers
4 476 участник(ов)

Общаемся на темы, посвященным Android-разработке, SDK, Kotlin, Realm и т.д.

Android Architecture
Android Architecture
2 186 участник(ов)

Русскоязычный чат по архитектуре в андроид приложениях. Подробнее: http://telegra.ph/Android-Architecture-12-24

rus-speaking/android
rus-speaking/android
1 705 участник(ов)

Основной чат по Android разработке (вопрос-ответ). ПРАВИЛА: bit.ly/andr-rules. NEWS: bit.ly/AnrdResId ЧАТЫ: Основной: bit.ly/andr-main IDE, сборка, Git, сервисы: bit.ly/andr-tools Оффтоп: bit.ly/andr-offtop Конференции, события: bit.ly/andr-events Вакансии, найм: bit.ly/andr-job Архитектура: bit.ly/andr-patterns Rx: bit.ly/andr-rx Тестирование: bit.ly/andr-test Kotlin: bit.ly/andr-kotlin Хаmarin: bit.ly/andr-xamarin За мат, спам, агрессию, предложения о работе, оффтоп в этом канале - бан на сутки и более ☢☢☢

Android Dev Подкаст
Android Dev Подкаст
1 325 участник(ов)

Комната для обсуждения Android Dev подкаста apptractor.ru/AndroidDev/ Общее обсуждение Android: https://t.me/android_ru Остальные чаты про Android: http://t.me/devChats Наши новости https://t.me/androiddevpodcast_news

SqlCom.ru - Стиль жизни SQL
SqlCom.ru - Стиль жизни SQL
908 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только MS SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz). Предложения в @sql_ninja

Android Guards
Android Guards
602 участник(ов)

Обсуждение любых вопросов касающихся безопасности Android. - Защита системы и приложений - Уязвимости и эксплойты - Вредоносное ПО - Копание в кишках системы и приложений (RE)

Android JOB
Android JOB
466 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению Android (full-time, part-time, remote и разовые подработки)

AndroidDev :: Разработка. It's Android time now!
AndroidDev :: Разработка. It's Android time now!
458 участник(ов)

It's Android time now! Чат разработчиков Android. Вакансии, резюме и информацию о митапах размещать можно. Публикацию скрытой и явной рекламы ваших каналов и сайтов после получения разрешения от @olegushakov

SQL_Ninja
SQL_Ninja
340 участник(ов)

Правила чата - https://t.me/sqlcom/88269 @sqlcom - основной канал (только SQL) @sql_ninja - второй канал (SQL вопросы начального уровня и свободное общение) @Gopnegbot - Викторина по SQL Server (наберите в привате /quiz)

Aandroid Talks!
Aandroid Talks!
212 участник(ов)

Чат об общих вопросах по ОС Android. Чат для разработки под андроид - pro.android: https://t.me/joinchat/AAAAAEKIFKnmRT9cMebb9w

Android Rus
Android Rus
68 участник(ов)