ステータスの変化に対応してアクションを実行します。これらのコンポーネントを使用することで、適切に整理されメンテナンスが容易な軽量のコードを作成できます。メソッドに実装するパターンが一般的です。このパターンではコードがうまく整理されず、エラーに急増につながってしまいます。メソッドから移動してコンポーネント自体に組み込むことができます。パッケージには、ライフサイクル対応コンポーネントを作成するためのクラスとインターフェースが用意されています。ライフサイクル対応コンポーネントは、アクティビティやフラグメントの現在のライフサイクルの状態に基づいて動作を自動的に調整できるコンポーネントです。プロジェクトにインポートするには、ライフサイクルのリリースノートの依存関係を宣言する手順をご覧ください。コンポーネントのほとんどに、ライフサイクルがアタッチされています。コードによって管理されます。動作には非常に重要で、アプリはライフサイクルに従う必要があります。従わない場合、メモリリークやアプリのクラッシュが発生する可能性があります。画面にデバイスの位置情報を表示するアクティビティについて考えてみましょう。一般的な実装は次のようになります。他のコンポーネントを管理するための呼び出しの回数が非常に多くなります。)のコードがかなりの量になるため、メンテナンスが困難になります。アクティビティやフラグメントが停止される前にコンポーネントが開始される保証はありません。設定チェックなど)を行う必要がある場合に特に当てはまります。メソッドが終了する競合状態が発生し、コンポーネントが必要以上に長い間存在し続けることもあります。パッケージに含まれているクラスとインターフェースを使用することで、上記の問題を回復性のある分離された方法で解決できます。コンポーネント(アクティビティやフラグメントなど)のライフサイクルの状態に関する情報を保持するクラスです。このクラスを使用すると、他のオブジェクトでその状態を監視できます。ステータスを追跡します。イベントにマッピングされます。オブジェクトによって追跡されるコンポーネントの現在の状態。ライフサイクルを構成する状態とイベント状態はグラフのノードと考えることができます。イベントはそれらのノード間のエッジと考えることができます。ステータスを監視するには、アノテーションをそのメソッドに追加します。メソッドを呼び出してオブザーバーのインスタンスを渡すことで、オブザーバーを追加できます。インターフェースが実装されています。次のセクションでこのインターフェースについて説明します。インターフェースです。クラスで実装する必要があります。)から分離して、それらのクラスと連携するコンポーネントを作成することができます。アプリクラスで実装できます。実装しているコンポーネントとシームレスに連携します。これは、オブザーバーが監視用に登録可能なライフサイクルをオーナーが提供できるためです。使用して初期化できます。クラスは、これにより自立できます。個々のコンポーネントに固有のロジックを持たせることで、アクティビティやフラグメントのロジックを簡単に管理できます。現在の状態が良好でない場合、特定のコールバックを呼び出さないようにします。トランザクションを実行するとクラッシュがトリガーされるため、そのコールバックの呼び出しは避けます。クラスを使用して、他のオブジェクトから現在の状態を照会できるようにします。クラスが完全にライフサイクル対応になっています。別のアクティビティやフラグメントから使用する必要がある場合は、その初期化のみが必要になります。セットアップとティアダウンの処理はすべて、クラス自体で管理されます。ライフサイクルと連動する必要があるクラスをライブラリで提供する場合は、ライフサイクル対応コンポーネントを使用することをおすすめします。クライアントで簡単に統合できます。クライアント側でライフサイクルを手動で管理する必要はありません。インターフェースがすでに実装されています。次のサンプルコードに示すように、イベントをそのクラスに転送する必要があります。コントローラ(アクティビティとフラグメント)はできる限りシンプルにします。コントローラでは独自のデータを取得する必要がありません。使用してデータを取得します。オブジェクトを監視して変更をビューに反映させます。通知するようにします。コントローラとその他のアプリ間のコネクタとして機能する必要があります。責任ではないことに注意してください。コントローラに提供する必要があります。コントローラ間のクリーンなインターフェースを維持します。することで、ビューをより宣言的にできます。アクティビティとフラグメントに記述する更新コードを最小限に抑えることができます。コードを排除し、適切に抽象化を行います。クラスを作成することを検討してください。コンポーネントを簡単にテストできます。コンテキストを参照しないでください。コレクタによって適切に廃棄されなくなります。コルーチンを使用して、長時間実行されるタスクと非同期に実行できるその他のオペレーションを管理します。ライフサイクル対応コンポーネントのユースケースライフサイクル対応コンポーネントを使用すると、さまざまなケースにおいてライフサイクルを極めて簡単に管理できるようになります。大まかな現在地情報と詳細な現在地情報の切り替え。ライフサイクル対応コンポーネントを使用すると、現在地情報アプリが表示されている間は詳細な現在地情報を有効にし、そのアプリがバックグラウンドで実行されているときには大まかな現在地情報に切り替えることができます。自動更新することができます。動画のバッファリングの停止と開始。ライフサイクル対応コンポーネントを使用すると、可能な限り早く動画のバッファリングを開始できます。アプリが完全に起動するまで再生が延期されます。ライフサイクル対応コンポーネントを使用して、アプリが破棄されたときにバッファリングを終了することもできます。ネットワーク接続の開始と停止。データのリアルタイム更新(ストリーミング)を有効にできます。アプリがバックグラウンドに移動されたときに、リアルタイム更新を自動的に一時停止できます。ドローアブルの一時停止と再開。ドローアブルを一時停止し、アプリがフォアグラウンドで実行されるようになった時点で、ドローアブルを再開できます。イベントがディスパッチされます。変更不可と見なされます。変更しようとすると、アプリのナビゲーションの状態に不整合が生じる可能性があります。例外をスローするのはこのためです。以上でない場合はオブザーバーを呼び出さないようにして、こうしたエッジケースを追加設定なしで防止しています。遷移していないというギャップが残ります。システムによって呼び出されるまでイベントはディスパッチされなくなりますが、現在の状態をチェックするすべてのコードで実際の値を取得できるようになります。つの大きな問題があります。呼び出すわけではありません。状態が変更不可であっても、ライフサイクルがアクティブであるとオブザーバーが判断するインターバルが長くなる可能性があります。以下で提供されている回避策を実装する必要があります。ディスパッチされます。クラスにおける呼び出し順序と一致しないため注意が必要です。その他のリソースライフサイクル対応コンポーネントを使用したライフサイクルの処理について詳しくは、以下のリソースをご覧ください。