2015-06-19 23 views
1

我的Android应用程序有多个活动。 MainActivity在其onCreate()方法中构造一个Dagger2组件,并将其分配给一个静态变量,以便任何类都可以调用静态方法MainActivity.getDaggerComponent(),然后为它自己注入依赖关系。Dagger2组件作为静态全局变量

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

如何确保Dagger2组件始终可用于所有活动?

+0

在'Application'类中初始化它,或者静态地将它初始化 –

+0

我需要对MainActivity的引用传递到组件的构造函数中,所以我不认为这些方法都可以工作。如果我不必这样做,那将是完美的。 –

+1

然后可能是你在做一个非常错误的事情,试图在另一个Activity中使用一个Activity的依赖关系。这可能会造成内存泄漏,特别是设计问题。你能否提供更多关于你实际试图用依赖注入解决的细节? –

回答

1

Application类中初始化Dagger组件或静态地。这可能是因为你试图在另一个Activity中使用一个Activity的依赖关系做了一件非常错误的事情。这可能会造成内存泄漏,特别是设计问题。如果你的第一个Activity已经被破坏了怎么办?谁将释放Dagger实例?为什么graph属于第一个Activity而不是第二个?如果用户从第二个Activity开始输入您的应用,那么第一个将不会被初始化。等等等等。

如果您仍需要Activity实例,那么你应该将Activity内使用Activity特定组件,并在全球(Application宽)组件移动一切。