2016-04-28 14 views
2

我看到如果在活動中實例化一個Dagger 2組件,那麼它會在onDestroy()方法中被忽略,如here所示。如果我沒有在活動onDestroy()中設置Dagger 2 Component爲null,會發生什麼?

public class MyActivity { 
    private MyActivityComponent component; 
    //... 

    public void onCreate() { 
     component = Dagger_MyActivityComponent.builder() 
      .myApplicationComponent(App.getComponent()) 
      .build() 
      .inject(this); 

     //... 
    } 

    public void onDestroy() { 
     component = null; 
    } 
} 

如果我不null該實例,並會發生什麼,會發生什麼?

附註:in comments我發現有用的提示,爲何人們會將其設置爲null這是非常有說服力的:「我不認爲這是必要的,但它定義範圍很清楚」。

回答

0

如果我不清空那個實例會發生什麼?

什麼都沒有。onDestroy被調用後,活動對象將在某個點被垃圾收集。如果活動重新創建,它將成爲一個新對象。你的匕首組件也將被垃圾收集,然後隨着你的活動。我通常不會null我的組件在onDestroy,因爲我認爲它沒有必要。

這將盡管不成立如果您保持靜態引用您的活動或有其他一些內存和活動泄漏。但是如果你有這些,那麼如果你的組件是null,它也不會有太大的區別。

+0

「如果您保持對您的活動的靜態引用或者有其他某種內存和活動泄漏,這樣做雖然不成立。」你能詳細解釋一下這一點嗎? –

+0

@MarianPaździoch這究竟是什麼不清楚給你?如果你泄漏了你的活動,如果你沒有設置它,你也會泄漏這個組件。如果您泄漏組件並引用您的活動,則無論您將組件設置爲null,這也會泄漏您的活動。如果你保持靜態變量設置爲這隻會導致他們的泄漏。 –

相關問題