我在我的應用中使用Dagger。 正如文檔所述,我在Application
類中將它作爲private
static
類成員進行安裝,並在需要時將其獲得getter
。Dagger在SplashActivity處爲null
private void initDagger() {
appComponent = DaggerAppComponent
.builder()
.appModule(new AppModule(this))
.build();
}
但有時當調用從getter
我SplashActivity
(這是我的啓動Activity
)appcomponent
是空的,所以我得到一個NullpointerException
當我嘗試注入到SplashActivity
匕首。 我不能重現這個問題,但我可以在Crashlytics中使用它。 如果用戶沒有關閉應用程序,但很長時間後會返回,可能會發生這種情況。在這種情況下,我再次調用SplashActivity
並清除堆棧,因爲我必須重新啓動一些我可以在此處執行的操作。也許這就是appcomponent
爲空時的一點。 我只能在SplashActivity
以及僅有的Android 7.x(和一些6.x)中看到此問題。 現在我試圖讓appcomponent
像singletone
public static AppComponent initDaggerAndGet(IndexApplication application){
if(appComponent == null){
synchronized (lock){
if(appComponent==null)appComponent = DaggerAppComponent
.builder()
.appModule(new AppModule(application))
.build();
}
}
return appComponent;
}
當我在SplashActivity
得到它,我重構initDagger()
方法這樣
private void initDagger() {
initDaggerAndGet(this);
}
正如我寫的,我不能重現該問題,我在SO上找不到這樣的問題。 您認爲可能是什麼問題?重構的初始化會解決它嗎? 謝謝!
請包括_all_受影響的相關代碼以及錯誤和實際堆棧跟蹤。我的猜測是該活動被破壞並重新創建,並且出於某種原因您不會重新創建該組件。 –