2017-10-07 61 views
0

我使用Dagger2的android項目 我有2個範圍:ActivityScope和FragmentScope 我讀了一些示例代碼,他們說定義和使用ActivityScope,因此對象將被銷燬與活動生命週期。由於Activity和Fragment具有不同的生命週期,所以我們應該有2個範圍。Dagger2使用範圍

我的問題是: 我需要做些什麼來讓代碼知道,當我使用ActivityScope時,對象應該被銷燬的活動生命週期?或代碼自動知道,當我建立的匕首,並注入到活動這樣

((DeezFoodzApplication) getApplication()).getAppComponent().inject(this); 
+0

它唯一知道的是,如果它已經在該組件中創建,那麼它不應該再次創建。 – EpicPandaForce

回答

0

我需要做些什麼來讓代碼知道,當我使用ActivityScope,對象應該被與該活動的生命週期被破壞?

垃圾收集器將照顧它(除非你把它存放在一些靜態變量)。

匕首不知道什麼,但如何創建或注入您的對象。它並不關心生命週期,何時何地注入/創建對象,或者如何存儲組件。沒有魔法發生,沒有服務正在運行,或涉及其他一些黑客。組件只是一些java類,它們知道如何用對象填充活動中的這些字段。就這樣。

  • 如果您不存儲組件,它將在使用後收集garbae。
  • 如果您存儲組件在活動/片段的領域,這將是與活動中收集垃圾/片段後的onDestroy
  • 如果組件存儲在一些靜態的變量或者通過它的地方長住那麼會留在那裏,直到你null它或對象被垃圾收集。 (你的Activity/Fragment也可能會泄漏)避免將組件存儲在靜態變量中。

這只是一個普通的對象,儘量不要過度。您始終可以檢查生成的源代碼或進行調試。