RoboGuice основан на Google Guice библиотеки, которая является отражением основанная на зависимостях. К сожалению, Guice плохо работает на Android. Например, в моем последнем проекте для инициализации инжектора потребовалось от 1 до 1,5 секунд.
В какой-то момент разработчик RoboGuice решил улучшить производительность своей библиотеки, выполняя некоторую работу во время компиляции, и это то, о чем RoboBlender. Он создает базу данных аннотаций во время компиляции, и RoboGuice использует эту базу данных во время выполнения для поиска точек впрыска. Вы можете узнать больше о RoboBlender here. Этот подход потребовал больших изменений в Guice, поэтому автору RoboGuice пришлось его разветвить и даже отправил в Guice pull request. Но этот PR был отклонён главным образом потому, что он противоречит идее библиотеки Guice (как рамочной рамки DI).
Извините за такое длинное введение и вот ответ на ваш вопрос. При вызове RoboGuice.setUseAnnotationDatabases(false)
вы просите RoboGuice обрабатывать все во время выполнения через отражение. Другими словами RoboGuice работает так же, как оригинальный Guice, и это не очень быстро. Когда вы пытаетесь использовать базы данных аннотаций и сбои приложений, это может случиться, потому что базы данных аннотаций не могут быть найдены. Может быть, вы забыли добавить <meta-data android:name="roboguice.annotations.packages" android:value="..."/>
в AndroidManifest.xml
?
Наконец, я бы не рекомендовал использовать Guice или RoboGuice на Android, потому что первый очень медленный, а последний сломан по дизайну. Гораздо лучше использовать библиотеку DI времени компиляции, такую как Dagger, и для ее переключения не требуется много времени.
Вы используете [RoboBlender?] (Https://github.com/roboguice/roboguice/wiki/RoboBlender-wiki) – mbmc
Да, @tibo, я использую Roboblender – Antonio
основе [код] (https: //github.com/roboguice/roboguice/blob/bf9043c5af085408a5d26ea8e5f857e8d0a9bdab/roboguice/src/main/java/roboguice/RoboGuice.java#L253), он не может найти вашу базу данных аннотаций. – mbmc