android - 作为静态全局变量的 Dagger2 组件

标签 android dagger dagger-2

我的 Android 应用有多个 Activity。 MainActivity 在其 onCreate() 方法中构造了一个 Dagger2 组件并将其分配给一个静态变量,因此任何类都可以调用静态方法 MainActivity.getDaggerComponent() 然后为自身注入(inject)依赖项。

我发现的问题是,当我启动 VideoPlayerActivity 时,有时会调用 MainActivity 对象的 onPause()。如果发生这种情况,静态组件变量将设置为空。稍后,VideoPlayerActivity 需要注入(inject)它的依赖项,但没有组件,所以事情就搞砸了。

如何确保 Dagger2 组件在所有 Activity 中始终可用?

最佳答案

Application 类中或静态初始化 Dagger 组件。尝试在另一个 Activity 中使用一个 Activity 的依赖项可能是您在做一件非常错误的事情。这可能会造成内存泄漏,尤其听起来像是一个设计问题。如果您的第一个 Activity 已经被销毁怎么办?谁将释放 Dagger 实例?为什么图形属于第一个 Activity 而不是第二个?如果用户将从第二个 Activity 进入您的应用怎么办 - 那么第一个甚至不会被初始化。等等等等。

如果您仍然需要 Activity 实例,那么您应该在 Activity 中使用 Activity 特定组件,并将其他所有内容移动到全局(应用程序宽)组件。

关于android - 作为静态全局变量的 Dagger2 组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30948373/

相关文章:

android - 使用卡片 View 在回收器 View 中加载文本太慢

android - 如何使用 Dagger 2.11 注入(inject)模拟

android - notifyDataSetChanged() 在更改从 firebase 检索的 ListView 数据时导致 NullPointerException

java - 如何让我的程序等到任务完成后再继续?

android - 如何为 Hilt Android 提供上下文?

java - 子组件中的 Dagger 2 模块覆盖

java - 如何在 android 库项目中使用 dagger

java - Dagger MVVM - ViewModel 注入(inject)为空

android - 如何使用 dagger2 将 Activity 注入(inject) Adapter

android - 远程 TextView 不支持 setTextSize(float)?