Android: Доступ к единой базе данных из нескольких действий в приложении?
У меня есть приложение типа списка todo, в котором хранятся все данные заметки в базе данных sqlite3. Для каждого действия в приложении требуется доступ к базе данных для редактирования различных частей данных в реальном времени.
В настоящее время у меня есть каждое действие, открывающее свой собственный объект DBManager (вспомогательный класс, который я создал для управления базой данных). Это вызывает проблемы, хотя и я хотел бы получить немного более глобальное решение для доступа, поэтому мне не нужно открывать/закрывать/создавать базу данных.
Я рассматриваю несколько вариантов и хотел бы услышать плюсы и минусы каждого, а также другие предложения.
-
Стиль Singleton. Имейте класс оболочки, который возвращает ссылку на единственный менеджер баз данных, чтобы любое его действие могло его использовать.
-
Статический менеджер. Пусть класс менеджера будет полностью статическим членом и открыть базу данных при загрузке. Легко доступен любому, кто нуждается в нем (что есть все).
-
Слияние между 1 и 2. Я мог бы создать класс менеджера баз данных, который инициализирует экземпляр элемента singleton базы данных, и все методы обработки данных были статическими. Тогда мне даже не понадобилась бы ссылка на синглтон для доступа к базе данных. Мне нравится это решение лучше всего, пожалуйста, укажите на недостатки.
Предложения?
Ответы
Ответ 1
По моему мнению, поставщик контента сложный, и если вы не используете свои собственные действия, вам это не нужно. Поэтому я предлагаю вам сначала использовать одноэлементный класс. Затем, если у вас есть больше времени или необходимости, перейдите к поставщику контента.
Я использовал синглтон успешно в течение 6 месяцев без особых трудностей. (Я был осторожен, чтобы сделать его одиночным, хотя, только один экземпляр, который загружает данные один раз)
Синглтон
- Преимущество: Простота внедрения
- Преимущество: потому что я использовал общий
экземпляр, я мог бы реализовать кеширование
легко и, следовательно, сделать заявку
не нужно делать с базой данных, так как
часто
- Недостаток: нельзя передавать ваши данные с помощью внешних действий.
Поставщик контента
- Преимущество: вы можете поделиться своими данными
с внешними действиями
- Преимущество: вы можете интегрироваться с
API поиска
- Недостаток: сложный, необходимо
представлять ваши данные в другом
путь
- Недостаток: еще один Android API
потратить время на обучение
Ответ 2
Это вызывает проблемы, хотя
Что... что?
и я хотел бы немного больше глобальное решение доступа, поэтому у меня нет для открытия/закрытия/создания базы данных.
Открытие и закрытие базы данных SQLite дешево. Статичность и синглеты следует избегать, когда это возможно. Что заставляет вас думать, что ваше текущее решение плохое?
Ответ 3
Рекомендуемый способ сделать это на Android - использовать ContentProvider. Ваш первый контент-провайдер может чувствовать больше проблем, чем стоит, но как только вы получите шаблон вниз, это не должно быть слишком плохо, если вы не пытаетесь сериализовать капли.