我最近观看了Gregory Kick关于Dagger 2的演讲(链接)。他在那里解释了静态提供程序方法,这可以帮助提高性能。因此,我正在修改项目中的所有提供程序方法为static
。但是我有一个疑问。在我的项目中,有一些提供程序返回活动实例(外部依赖项)。因此,我编写了一个带有构造函数的module
,该构造函数从外部获取Activity
。
@Module
public class ActivityModule {
private static BaseActivity mActivity;
public ActivityModule(BaseActivity activity) {
mActivity = activity;
}
@ActivityScope
@Provides
Activity mActivity() {
return mActivity;
}
@ActivityScope
@Provides
BaseActivity baseActivity() {
return mActivity;
}
}
如果我必须将提供程序设置为静态的话,它会像下面这样:
@Module
public class ActivityModule {
private static BaseActivity mActivity;
public ActivityModule(BaseActivity activity) {
mActivity = activity;
}
@ActivityScoped
@Provides
static Activity mActivity() {
return mActivity;
}
@ActivityScoped
@Provides
static BaseActivity baseActivity() {
return mActivity;
}
}
所以,我将活动实例保存在一个静态成员中。这会导致任何内存泄漏吗?或者dagger会自动管理它,当活动被销毁时删除静态引用? 在这种情况下保留静态提供程序是推荐的吗?
onDestroy()
中将该字段重置为 null,否则是的。 - EpicPandaForce@Provides @ActivityScoped static MyFragment provideFragment() { return MyFragment.createInstance(); }
- user4260260