2016-12-30 6 views
0

Я начал изучать и использовать greendao ORM, и у меня есть эта проблема. Я пишу приложение memo/alert, и это означает, что мне нужен доступ к БД из различных видов деятельности, а также служб и приемников. Например: на одном экране я устанавливаю значения предупреждений. На службе и получателе я читаю эти значения и действую соответственно.Доступ к db с использованием greendao через приложение

Настройка и доступ к БД с объектами и отношениями, кажется, работают нормально внутри моего основного действия oncreate(), поскольку я только что установил кодер там, чтобы протестировать и отладить.

Я думал о написании одноэлементного класса, который будет обрабатывать весь доступ и операции БД, но поскольку это не активность, у него нет «контекста» . Я знаю, что передача контекста как параметра - плохая идея. Мне нужно найти способ доступа к БД из всех вышеперечисленных.

Кроме того, я где-то читал, что я не должен инициализировать БД в основном действии. Может ли кто-нибудь уточнить это и объяснить идею инициализации и проблему с основным видом деятельности?

Надеюсь, что я смог очистить свои проблемы. Спасибо за чтение и, возможно, за ответ.

+0

Вы можете использовать контекст приложения, который одноэлементен для жизни вашего процесса. 'context.getApplicationContext()' – Karakuri

+0

Спасибо @Karakuri, но контекст не сразу доступен мне в сервисах или вспомогательных классах. –

+0

Я читал, что проходящий контекст как параметр приводит к утечке. И основная проблема заключается в том, как добраться до контекста, когда он недоступен. –

ответ

0

Утечка контекста означает, что вы сохранили ссылку на Context за пределами своего обычного жизненного цикла - обычно это законченный Activity или Service, который был остановлен. Передача Context в качестве аргумента метода не означает, что существует утечка. Это всего лишь утечка, если вы сохраните ссылку на это Context в поле и сохраните ее за пределами того, что система хочет ее уничтожить (поэтому ваша ссылка не позволяет собирать мусор). То же самое может произойти, если вы сохраните ссылку на что-то еще, содержащее ссылку на Context, ярким примером которого является View.

Существует приложение Context, которое живет до тех пор, пока выполняется ваш процесс подачи заявок, и всегда является синглом. Удержание ссылки на нее не является утечкой. Это означает, что вы можете использовать его в своем вспомогательном классе базы данных singleton, не беспокоясь о его утечке. Ваш синглтон может фактически принять любые Context, потому что вы можете просто позвонить .getApplicationContext() на нем, чтобы получить этот экземпляр контекста приложения.

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

Вот большая статья на Context с, которые могут быть полезны: https://possiblemobile.com/2013/06/context/

 Смежные вопросы

  • Нет связанных вопросов^_^