我最近在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