2017-09-12 3 views
0

私はDagger 2を初めて使い慣れたので、どのように動作するのか基本的なことを把握することができましたが、カスタムスコープの実際の動作については混乱しています。だから、ここで問題です:ダガー2スコープコンポーネントはどのように機能しますか?

@Scope 
@Retention(RetentionPolicy.RUNTIME) 
public @interface ActivityScope { 
} 

とスコープのコンポーネント::私はActivityScope次のように定義されていると言う

@ActivityScope 
@Component(modules = ActivityModule.class) 
public interface ActivityComponent { 
    /* ... */ 
} 

私はそれを理解する方法を、このコンポーネントが提供するオブジェクトは、その単一のインスタンスを持つことになりますコンポーネントが存続する限り生存しますが、コンポーネントの存続期間はどのように決まりますか?コンポーネントが構築される場所(アプリケーション、アクティビティ内、フラグメント...)ですか、それとも別のものですか?

これがこの質問をする適切な場所であるかどうかわかりませんが、助けてください。ありがとう。

答えて

2

私はそれを理解する方法は、このコンポーネントによって提供されるオブジェクトは

正しい部品命ある限り生きて単一のインスタンスを[...]があります。このコンポーネントによって提供されるスコープ付きオブジェクトは、の場合にのみ存在します。これはスコープのないオブジェクトの場合には当てはまりません。毎回再作成され、どのコンポーネントでも提供できます。

[...]しかし、コンポーネントの存続期間はどのように決まりますか?コンポーネントが構築される場所(アプリケーション、アクティビティ内、フラグメント...)ですか、それとも別のものですか?

です。コンポーネントを静的変数に保存する場合は、— —を実行しないでください。アプリケーションが動作中で実行中であれば、そのコンポーネントは存続します(プロセス内でアクティビティがリークする可能性があります)。

アクティビティにコンポーネントを保存するだけで、アクティビティが破棄されると、残りのコンポーネントとともにガベージコレクションが行われます。

+0

説明をいただきありがとうございます。本当に役に立ちました。 –

関連する問題