Я начал учиться и использовать greendao ORM, и у меня есть эта проблема.
Я пишу приложение memo / alert, и это означает, что мне нужен доступ к БД из различных действий, а также служб и приемников.
Например: на одном экране я устанавливаю значения оповещений.
На службе и получателе я читаю эти значения и действую соответственно.
настройка и доступ к БД с объектами и отношениями, кажется, работают нормально изнутри моей основной деятельности oncreate (), поскольку я только что настроил кодер для тестирования и отладки.
Я думал о написании одноэлементного класса, который будет обрабатывать все доступ к БД и операции, но так как это не действие, у него нет » контекста»
Я знаю, что передача контекста в качестве параметра-плохая идея.
Мне нужно найти способ получить доступ к БД из всех вышеперечисленных.
Кроме того, я где-то читал, что я не должен инициализировать DB в основном действии.
Может ли кто-то развить это и объяснить идею инициализации и проблему с основным действием?
Надеюсь, я смог прояснить свои проблемы.
Спасибо за чтение и, возможно, ответ.
Утечка контекста означает, что вы сохранили ссылку на более
Context
чем нормальный жизненный цикл-обычноActivity
завершенный илиService
остановленный. Передача аргумента a вContext
качестве метода не означает, что произошла утечка. Это только утечка, если вы сохраняете ссылку на этоContext
в поле и держите ее за пределами точки, которую система хочет уничтожить (поэтому ваша ссылка предотвращает ее от сбора мусора). То же самое может произойти , если вы держите ссылку на что-то еще, что держит ссылку на aContext
, основным примером которого является aView
.Существует приложение
Context
, которое живет так долго, как ваш процесс подачи заявки, и всегда является одноэлементным. Удержание ссылки на него не является утечкой. Это означает, что вы можете использовать его в своем одиночном вспомогательном классе базы данных, не беспокоясь, что он будет протекать. Ваш синглтон может фактически принять любойContext
, потому что вы можете просто вызвать.getApplicationContext()
его, чтобы получить этот экземпляр контекста приложения.Подклассы
Application
необязательны. На мой взгляд, преимущество этого заключается в использованииonCreate()
метода приложения для выполнения любой одноразовой установки, так как это ваша первая возможность запустить код приложения.Вот отличная статья о
Context
s, которая может быть полезной: https://possiblemobile.com/2013/06/context/