2015-06-19 46 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寬)組件移動一切。