作为静态全局变量的 Dagger2 组件
Dagger2 Component as Static Global Variable
我的 Android 应用有多个活动。 MainActivity 在其 onCreate() 方法中构造了一个 Dagger2 组件并将其分配给一个静态变量,因此任何 class 都可以调用静态方法 MainActivity.getDaggerComponent() 来为自身注入依赖项。
我发现的问题是,当我启动 VideoPlayerActivity 时,有时会调用 MainActivity 对象的 onPause()。如果发生这种情况,静态组件变量将设置为空。稍后,VideoPlayerActivity 需要注入它的依赖项,但是没有组件所以事情爆炸了。
如何确保 Dagger2 组件在所有活动中始终可用?
在 Application
class 中或静态初始化 Dagger 组件。尝试在另一个 Activity 中使用一个 Activity 的依赖项可能是你在做一件非常错误的事情。这可能会造成内存泄漏,尤其听起来像是一个设计问题。如果您的第一个 Activity
已经被销毁怎么办?谁将释放 Dagger 实例?为什么图属于第一个 Activity
而不是第二个?如果用户将从第二个 Activity
进入您的应用程序怎么办 - 那么第一个甚至不会被初始化。等等,等等。
如果您仍然需要 Activity
实例,那么您应该在 Activity
中使用 Activity
特定组件,并将其他所有内容移动到全局(Application
范围)组件中。
我的 Android 应用有多个活动。 MainActivity 在其 onCreate() 方法中构造了一个 Dagger2 组件并将其分配给一个静态变量,因此任何 class 都可以调用静态方法 MainActivity.getDaggerComponent() 来为自身注入依赖项。
我发现的问题是,当我启动 VideoPlayerActivity 时,有时会调用 MainActivity 对象的 onPause()。如果发生这种情况,静态组件变量将设置为空。稍后,VideoPlayerActivity 需要注入它的依赖项,但是没有组件所以事情爆炸了。
如何确保 Dagger2 组件在所有活动中始终可用?
在 Application
class 中或静态初始化 Dagger 组件。尝试在另一个 Activity 中使用一个 Activity 的依赖项可能是你在做一件非常错误的事情。这可能会造成内存泄漏,尤其听起来像是一个设计问题。如果您的第一个 Activity
已经被销毁怎么办?谁将释放 Dagger 实例?为什么图属于第一个 Activity
而不是第二个?如果用户将从第二个 Activity
进入您的应用程序怎么办 - 那么第一个甚至不会被初始化。等等,等等。
如果您仍然需要 Activity
实例,那么您应该在 Activity
中使用 Activity
特定组件,并将其他所有内容移动到全局(Application
范围)组件中。