Android: доступ к одной базе данных из нескольких действий в приложении? - PullRequest
11 голосов
/ 15 декабря 2009

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

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

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

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

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

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

Предложения

Ответы [ 4 ]

9 голосов
/ 15 декабря 2009

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

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

Singleton

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

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

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

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

Какие ... что?

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

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

0 голосов
/ 10 июня 2018

Это 2018 год, и тем временем Android эволюционировал.

Компонентом архитектуры Android, который сегодня рекомендуется для этого варианта использования, является Android Room.

0 голосов
/ 15 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...