как лучше всего размещать докладчиков в области видимости?
Обычно докладчик должен находиться в некоторой области действия. Отсутствие его в какой-либо области приведет к проблемам, так как каждый раз, когда вы запрашиваете докладчика, он будет создавать новый.
Какую область вы выберете, в основном зависит от вашего стиля программирования, но наиболее распространенным, вероятно, будет @PerActivity
как область, которая следует за жизненным циклом действия. (так же, как вы можете использовать что-то вроде @PerFragment
с фрагментами и их жизненным циклом)
Можем ли мы иметь докладчиков на @Singleton или @AppScope без каких-либо проблем?
Да и нет. Долгоживущие объекты, ссылающиеся на менее живущие (например, объект @Singleton
, который ссылается на объект с жизненным циклом активности), обычно не являются хорошей практикой, поскольку могут привести к утечкам памяти.
Вы можете избежать этих проблем, правильно добавляя/удаляя объекты с более коротким сроком службы (например, добавляя в onCreate
, удаляя в onDestroy
) или используя WeakReference
.
Некоторые программисты сохраняют своих докладчиков как @Singleton
или каким-то подобным образом и меняют представления, но опять же это зависит от того, как вы предпочитаете свой код. Это будет работать, но вы должны убедиться, на какие объекты вы ссылаетесь, и потом очистить.
Должны ли они быть помещены в @ActivityScope, чтобы уничтожать их каждый раз, когда активность уничтожается?
Это, безусловно, самый простой вариант, поскольку у вас не возникнет проблем со ссылкой на действие или что-либо еще, что от него зависит. Таким образом, вам, скорее всего, не придется беспокоиться об утечках памяти или других проблемах.
В конце концов, это ваш код, и вы должны делать то, что лучше работает для вас.
person
David Medenjak
schedule
08.06.2017