2015-06-19 3 views
1

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

Проблема, которую я обнаруживаю, заключается в том, что когда я запускаю свою VideoPlayerActivity, объект MainActivity иногда получает свою функцию onPause(). Если это произойдет, статическая переменная компонента получает значение null. В более поздние моменты, VideoPlayerActivity должен вводить свои зависимости, но нет компонента, чтобы все взорвалось.

Как обеспечить постоянный доступ к компоненту Dagger2 для всех видов деятельности?

+0

Инициализировать его в классе 'Application' или просто статически –

+0

Мне нужна ссылка на MainActivity для передачи в конструктор компонента, поэтому я не думаю, что любой из этих методов будет работать. Если бы мне не пришлось, это было бы прекрасно. –

+1

Возможно, вы ошиблись в попытке использовать зависимости одного «Активность» в другой «Деятельности». Это может вызвать утечку памяти и, в частности, звучит как проблема с дизайном. Не могли бы вы предоставить более подробную информацию о том, что вы на самом деле пытаетесь решить с помощью инъекции зависимостей? –

ответ

1

Инициализировать компонент кинжала в классе Application или просто статически. Возможно, вы пытаетесь использовать зависимости одного действия в другой деятельности. Это может вызвать утечку памяти и, в частности, звучит как проблема с дизайном. Что, если ваш первый Activity был уже уничтожен? Кто освободит экземпляр Кинжала? Почему граф относится к первому Activity, а не ко второму? Что делать, если пользователь будет вводить ваше приложение со второго Activity - тогда первый не будет даже инициализирован. И так далее, и так далее.

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

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