Я пытаюсь использовать последнюю версию на сегодняшний день (3.0.1) из RoboGuice
на своем новом Android-приложении, используя Android Studio 1.5 (стабильный).Является ли RoboGuice wiki устаревшим? setBaseApplicationInjector не существует?
Давным-давно, я имел дело с Guice & RoboGuice, но я взял некоторое чтение о том, как использовать Roboguice с новыми улучшениями &.
Дело в том, что я хочу использовать пользовательский модуль а для пользовательских привязок.
В моем конкретном случае у меня есть класс SoundManager
, который предоставляет инструменты для воспроизведения нескольких звуковых дорожек по желанию с внутренним пулом MediaPlayer
. Главный конструктор принимает applicationContext
, который будет использоваться для создания нового MediaPlayer
. Кроме того, этот класс должен быть синглтон:
- Если трек будет проигрываться на протяжении всего приложения, то
SoundManager
не может быть уничтожен/воссозданы; - Один пул
MediaPlayer
достаточно, очень какExecutorPool
. Его следует использовать в случае необходимости для лучшего управления ресурсами.
Так что я сделал следующее:
- Создание интерфейса разоблачением поведение по умолчанию моей
SoundManager
: воспроизведение, остановка, резюме, выпустите и т.д ...; - Внедрение этого интерфейса в полностью рабочем классе;
- Создание
Module
расширенияcom.google.inject.AbstractModule
со следующим кодом:
@Override защищен недействительным Configure() { связывания (SoundManagerInterface.class) .то (SoundManager.class) .asEagerSingleton(); }
Теперь весь смысл этого SO сообщение:
куда RoboGuice.setBaseApplicationInjector()
идти ?? Все статьи, которые я прочитал с примерами модулей, самые последние уже в 2014 году, раскрывают один и тот же метод: создание класса приложения, расширяющего android.app.Application
, и в методе onCreate()
, используйте RoboGuice.setBaseApplicationInjector()
. Но этого не существует!Единственные доступные методы, которые я есть являются:
RoboGuice.getOrCreateBaseApplicationInjector()
RoboGuice.destroyInjector()
RoboGuice.newDefaultRoboModule()
RoboGuice.overrideApplicationInjector()
RoboGuice.setUseAnnotationDatabases()
RoboGuice.injectMembers()
В моей с ase Я использовал getOrCreateBaseApplicationInjector()
, потому что он был самым близким к setBaseApplicationInjector()
и, наконец, продолжал тестировать мой код.
Suprise, это сработало! Мой SoundManager
правильно создан, и applicationContext каким-то образом вводится (откуда я не знаю, но я надеюсь, что это не вызов Activity
, иначе я сделан для утечки памяти ...) и звуковые дорожки действительно играют.
Но является ли экземпляр моего SoundManager
того, что у одного синглета? Нет. Я попытался впрыснуть 3 из них и есть все объекты differents, пока показывает отладчик ...
Так что я делаю неправильно?
Эта ссылка: https://github.com/roboguice/roboguice/wiki/Advanced-Custom-Bindings#register-the-module-with-roboguice не может быть воспроизведена в моем коде:/
спасибо за ваш ввод, но мне удалось использовать RoboGuice 3 без необходимости писать что-либо классом Application, и он работает. Не знаю, как, но это работает. – Mackovich