Android: Доступ к единой базе данных из нескольких действий в приложении?

У меня есть приложение типа списка todo, в котором хранятся все данные заметки в базе данных sqlite3. Для каждого действия в приложении требуется доступ к базе данных для редактирования различных частей данных в реальном времени.

В настоящее время у меня есть каждое действие, открывающее свой собственный объект DBManager (вспомогательный класс, который я создал для управления базой данных). Это вызывает проблемы, хотя и я хотел бы получить немного более глобальное решение для доступа, поэтому мне не нужно открывать/закрывать/создавать базу данных.

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

  • Стиль Singleton. Имейте класс оболочки, который возвращает ссылку на единственный менеджер баз данных, чтобы любое его действие могло его использовать.

  • Статический менеджер. Пусть класс менеджера будет полностью статическим членом и открыть базу данных при загрузке. Легко доступен любому, кто нуждается в нем (что есть все).

  • Слияние между 1 и 2. Я мог бы создать класс менеджера баз данных, который инициализирует экземпляр элемента singleton базы данных, и все методы обработки данных были статическими. Тогда мне даже не понадобилась бы ссылка на синглтон для доступа к базе данных. Мне нравится это решение лучше всего, пожалуйста, укажите на недостатки.

Предложения?

Ответ 1

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

Я использовал синглтон успешно в течение 6 месяцев без особых трудностей. (Я был осторожен, чтобы сделать его одиночным, хотя, только один экземпляр, который загружает данные один раз)

Синглтон

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

Поставщик контента

  • Преимущество: вы можете поделиться своими данными с внешними действиями
  • Преимущество: вы можете интегрироваться с API поиска
  • Недостаток: сложный, необходимо представлять ваши данные в другом путь
  • Недостаток: еще один Android API потратить время на обучение

Ответ 2

Это вызывает проблемы, хотя

Что... что?

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

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

Ответ 3

Рекомендуемый способ сделать это на Android - использовать ContentProvider. Ваш первый контент-провайдер может чувствовать больше проблем, чем стоит, но как только вы получите шаблон вниз, это не должно быть слишком плохо, если вы не пытаетесь сериализовать капли.