2016-04-28 1 views
2

ActivityでDagger 2 Componentをインスタンス化すると、後でhereのようにonDestroy()メソッドでNULLが返されることがあります。私はないnullそのインスタンスと何が起こるでしょうをすればActivity 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; 
    } 
} 

はどうなりますか?

サイドノート:「私はそれが必要だとは思わないが、それはスコープかなり明確定義」:in comments私は1つはかなり説得力のあるnullに設定する理由役に立つヒントを見つけました。

答えて

0

このインスタンス[...]をnullにしないとどうなりますか?

何もありません。onDestroyが呼び出されると、アクティビティオブジェクトはある時点でガベージコレクションされます。アクティビティが再作成されると、新しいオブジェクトになります。また、あなたのダガーコンポーネントは、あなたの活動と共にガベージコレクションされます。私は通常、null私のコンポーネントはonDestroyにはありません。

これは、あなたのアクティビティへの静的な参照を保持している場合や、他の種類のメモリやアクティビティのリークがある場合には、真ではありません()。しかし、あなたがそれらを持っている場合は、nullあなたのコンポーネントのいずれかでも大きな違いはありません。

+0

"これは、あなたの活動への静的な参照を保持したり、他の種類のメモリや活動のリークがある場合には当てはまりません。これをちょっと詳しく教えていただけますか? –

+0

@MarianPaździochこれはまさにあなたには分かりません。あなたの活動を漏らした場合、nullに設定しなければコンポーネントもリークします。あなたのコンポーネントをリークしてあなたの活動を参照する場合、あなたのコンポーネントをnullに設定しても、これはあなたの活動を漏らすでしょう。静的変数をどちらかに設定しておくと、これが漏れにつながるだけです。 –

関連する問題