スコープとコンポーネントのライフタイム
依存関係が存続する期間を制御します。
「スコープとコンポーネントのライフタイム」はCoddyKit上の無料Jetpack Compose Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはJetpack Compose Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Jetpack Compose Academyコースには全4レッスンが含まれています。
スコープが制御するもの
scope(スコープ)は、Hiltが1つのインスタンスをどれだけ長く保持し、どの範囲で共有するかを決めます。単なる作成方法ではなく、ライフタイムを制御するものです。
デフォルトではスコープなし
スコープアノテーションがない場合、Hiltは要求されるたびにnew instance(新しいインスタンス)を作成します。軽量でステートレスなオブジェクトにはこれで問題ありません。
@Provides
fun provideMapper(): Mapper = Mapper() // fresh each timeComponentはAndroidのライフタイムを反映する
Hiltは、アプリ全体から単一のViewまで、Androidのライフタイムに対応するcomponents(コンポーネント)を提供します。それぞれが独自のインスタンスを管理します。
Singletonでアプリ全体に共有する
SingletonComponentはアプリと同じ期間存続します。ここで@Singletonを付けたバインディングは一度だけ作成され、すべての画面で共有されます。
@InstallIn(SingletonComponent::class)Activityごとのライフタイム
ActivityComponentは1つのActivityに対応します。@ActivityScopedを使うと、そのActivity全体でインスタンスを共有し、新しいActivityでは再作成できます。
@ActivityScoped
class FormState @Inject constructor()ViewModelスコープ
ViewModelComponentはViewModelのライフタイムに対応します。@ViewModelScopedを付けると、依存関係はその1つのViewModel内だけで共有されます。
@ViewModelScoped
class SessionCache @Inject constructor()スコープはアノテーションとComponentの組み合わせ
各スコープannotation(アノテーション)は、1つのコンポーネントと対応します。@SingletonはSingletonComponent、@ActivityScopedはActivityComponentと組み合わせます。
ライフタイムは階層を形成する
コンポーネントは入れ子になります。Activityはアプリの中に、FragmentはActivityの中に存在します。子はparents(親)が提供するものをすべて利用できます。
慎重にスコープを設定する
インスタンスはコンポーネントが破棄されるまで保持されるため、スコープの設定にはmemory(メモリ)が必要です。状態を本当に共有する必要があるオブジェクトだけにスコープを設定してください。
より長いスコープへの参照を避ける
Activityのような短命なオブジェクトをSingletonに注入してはいけません。長く存続する側が短命なオブジェクトを保持し続け、メモリリークを引き起こします。⚠️
適切なスコープを選ぶ
スコープをdata's life(データのライフタイム)に合わせます。アプリ設定にはSingleton、画面の状態にはViewModelScopedを使います。適切に選ぶことで、リークや無駄を防げます。
確認テスト
アプリの存続期間全体で1つのインスタンスを共有したい場合、どのスコープが適していますか?
まとめ:ライフタイムを制御する
scopes(スコープ)は、SingletonからViewModelまで、インスタンスのライフタイムをコンポーネントに結び付けるものだと学びました。これにより、依存関係は必要な期間だけ存続します。🎯
AI チューターと学ぶ Kotlin — 無料
ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。
- コース
- 30
- レッスン
- 120
よくある質問
「スコープとコンポーネントのライフタイム」レッスンは無料ですか?
はい。「スコープとコンポーネントのライフタイム」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Jetpack Compose Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Jetpack Compose Academyコースには全4レッスンが含まれています。
「スコープとコンポーネントのライフタイム」で何を学びますか?
依存関係が存続する期間を制御します。 ブラウザで直接実行するハンズオンコードでJetpack Compose Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Jetpack Compose Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのJetpack Compose Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「スコープとコンポーネントのライフタイム」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このJetpack Compose Academyレッスンでコードを書いて実行できますか?
はい。すべてのJetpack Compose Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- DIの理由:テスト可能で疎結合なコード
- モジュール、@Provides、@Binds
- hiltViewModelと@HiltViewModel
- スコープとコンポーネントのライフタイム