我最近在Dagger 2上看过a talk by Gregory Kick。他在那里解释了关于静态提供者方法,这可能有助于提高性能。所以我将我项目中的所有提供者方法修改为static
。但我在这里有一个疑问。在我的项目中,有一些提供程序返回活动实例(外部依赖项)。所以我写了module
与一个构造函数,从外部采取Activity
。匕首2:是否推荐使用静态提供程序来处理活动和碎片?
@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;
}
}
所以,在这里我保持活动实例在static
成员。它会导致任何内存泄漏?或者匕首在活动被破坏时通过移除静态引用自动管理它? 在这种情况下,建议保持静态提供程序?
Yup内存泄漏嘉豪 – EpicPandaForce
@EpicPandaForce所以,只有在这种情况下,我应该避免静态提供程序? – Jrd
那么除非你在'onDestroy()'中将该字段重置为null,yeah – EpicPandaForce