2017-10-07 15 views
0

私はDagger2をアンドロイドプロジェクト用に使用しています 2つのスコープActivityScopeとFragmentScope サンプルコードを読み、アクティビティライフサイクルでオブジェクトが破棄されるようにActivityScopeを定義して使用しています。また、アクティビティとフラグメントのライフサイクルが異なるため、2つのスコープが必要です。Dagger2スコープを使用

私の質問は: ActivityScopeを使用するとき、オブジェクトをアクティビティライフサイクルで破棄する必要があることをコードに知らせるために何かする必要がありますか?あるいは、コードは自動的に私は短剣を構築し、この

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

それが知っている唯一の事は、それがそのコンポーネントで既に作成されている場合は、再度作成するべきではないということです。 – EpicPandaForce

答えて

0

のような活動に注入したときに、私はコードは、私がActivityScopeを使用する場合、オブジェクトはアクティビティのライフサイクルを破壊する必要があることを知らせるために何かをする必要がありますことを知っています?

(あなたには、いくつかの静的変数に格納していない限り)第ガベージコレクタはそれの世話をします。

ダガーは、オブジェクトの作成方法や注入方法以外は何も知らない。ライフサイクル、オブジェクトを挿入/作成する場所、場所、コンポーネントの格納方法は気にしません。魔法はありません。サービスは実行されていないか、他のハックが関わっています。コンポーネントは、あなたのアクティビティのそれらのフィールドをオブジェクトで埋める方法を知っているちょっとしたJavaクラスです。それで全部です。

  • コンポーネントを保管しないと、使用後にガーベージが収集されます。
  • アクティビティ/フラグメントのフィールドにコンポーネントを格納すると、onDestroyの後のアクティビティ/フラグメントでガベージコレクションされます
  • コンポーネントを静的変数に格納するか、long-livingのどこかに渡すとnullまたはまでオブジェクトがガベージコレクションされるまでそこにとどまります。 (あなたのアクティビティ/フラグメントもおそらく漏れるでしょう)静的変数にコンポーネントを格納しないでください。

これは他のどのような通常のオブジェクトでもありません。生成されたソースコードをチェックすることも、デバッグすることもできます。

関連する問題