Jetpack Compose Academy · レッスン

スコープとコンポーネントのライフタイム

依存関係が存続する期間を制御します。

レッスン 4/413 ステップ

「スコープとコンポーネントのライフタイム」は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 time

Componentは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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. DIの理由:テスト可能で疎結合なコード
  2. モジュール、@Provides、@Binds
  3. hiltViewModelと@HiltViewModel
  4. スコープとコンポーネントのライフタイム
← Jetpack Compose Academyに戻る