Когда (и когда нет) передавать контекст активности в Android
- Почему в хорошем дизайне шаблонов следует вставлять Контекст вместо объекта активность?
- Так ли это? достаточное количество аннотаций @ActivityContext, или нам следует также указать аннотацию @ActivityScoped?
- Если мы просто добавим @ActivityScoped, как помощник по разрешению ниже, и мы забыли добавить @ActivityContext, будет ли Hilt или Dagger ограничивать их зависимости автоматически, или я должен гарантировать Hilt, что этот контекст является контекстом активности и привязан к действию, внедренному в этот объект ?
- Позволит ли Dagger смешивать области действия, такие как класс меню? GPT в чате отвечает, что позволяет смешивать области, но я в этом сомневаюсь. Как я узнал из курса Василия Зуканова, объекты ограничивают свои зависимости.
Это некоторые объекты, связанные с пользовательским интерфейсом, которые были внедрены в hilt, дизайн которых является хорошей практикой и которого следует избегать в Hilt
///нет области действия
//это может быть ограничено действием, внедренным в этот объект
//это означает, что при воссоздании этого действия будет использоваться новый экземпляр //но мы предоставить контекст активности
///это будет связано с жизненным циклом активности
Код: Выделить всё
public class PermissionHelper {
private final Context mActivity;
@Inject
public PermissionHelper(@ActivityContext Context activity) {
this.mActivity = activity;
}
}
Код: Выделить всё
@ActivityScoped
public class PermissionHelper {
private final Context mActivity;
@Inject
public PermissionHelper(Context activity) {
this.mActivity = activity;
}
//Меню — @ActivityScoped, а общие ссылки — @Singleton // кинжал позволит смешивать области действия
Код: Выделить всё
@ActivityScoped
public class Menuu extends BaseObservablee {
@Inject
public Menuu(Context context, SharedPref sharedPreferences) {
applicationcontext = context;
this.sharedPref = sharedPreferences;
}}
В зависимости от того, с чем я экспериментировал, я добавлю дополнительную информацию:
- На первый вопрос ответ таков: нам следует избегать внедрения активности, чтобы не потерять развязку, которая является основной целью DI, обеспечить инфлятор макета, контекст активности и избегать использования контекста в нижнем домене. слой.
- Ответ: нет, недостаточно, мы должны указать контекст активности, чтобы hilt мог различать контекст приложения и контекст активности.
- ответ: нет, мы следует учитывать как область действия, так и контекст действия (зависимости области действия гарантируют, что они создаются и уничтожаются вместе с соответствующим действием, что помогает эффективно управлять памятью. Предоставление контекста действия вместо контекста приложения гарантирует, что зависимости осведомлены о жизненном цикле текущего действия)
Если область действия не указана, объекты в Hilt будут определять область своих зависимостей, как это учил Василий Зуканов, но если область действия была определена как общие настройки, этот одноэлементный объект будет использоваться совместно в течение жизненного цикла. приложения.
Подробнее здесь: https://stackoverflow.com/questions/786 ... on-in-hilt