エクスペリエンスにとっては非常に重要です。状態が変わらないことを期待しますが、アクティビティと、そのアクティビティに保存されている状態はすべて破棄されます。データの複雑さ、アプリのユースケースによって決まります。取得速度とメモリ使用量を考慮する必要もあります。状態はユーザーの期待を満たす必要があります。スムーズかつ快適に操作できなければなりません。データ読み込みで遅延が発生しないようにします。両方を使用する必要があります。状態に対するユーザーの期待、状態を保持するためのオプション、それぞれのトレードオフおよび制限について説明します。ユーザーの期待とシステムの動作ユーザーは自分が行う操作に応じて、アクティビティ状態がクリアされる、または保持されることを期待します。ユーザーが期待する処理が、システムによって自動的に実行される場合もあれば、ユーザーの期待とは逆の処理が実行されることもあります。状態が変わらないことを期待します。ユーザーは、次の方法でアクティビティを完全に終了できます。サポート)これらの完全な終了ケースにおけるユーザーの前提条件は、ユーザーがアクティビティから離れた場所に完全に移動していることです。ユーザーは、アクティビティをもう一度開いたときに、クリーンな状態から開始されることを期待します。これらの終了シナリオの基本的なシステム動作は、ユーザーの期待に一致します。インスタンスは、そのインスタンスに保存されている状態と、アクティビティに関連付けられた保存済みインスタンス状態レコードとともに破棄され、メモリから削除されます。完全な終了に関するこのルールには例外がいくつかあります。戻るボタンを使用することで、ブラウザを終了する前に閲覧していたウェブページが再びブラウザに表示されることをユーザーが期待している場合があります。状態が変わらないことです。すべての状態がワイプされます。ページをご覧ください。設定変更のデフォルトの動作は、オーバーライドできることに注意してください(ただし、推奨されません)。詳しくは、設定の変更を自分で処理するをご覧ください。状態が変わっていないことを期待します。検索アクティビティで検索を実行した後、ホームボタンを押すかまたは電話に出たユーザーは、その後検索アクティビティに戻ったときに前とまったく同じ検索キーワードと検索結果がまだ表示されていることを期待します。このシナリオではアプリはバックグラウンドにあり、システムは、アプリのプロセスをメモリに保持しようと最善を尽くします。ユーザーが元のアプリを離れ、他のアプリを操作している間にアプリのプロセスがシステムによって破棄されることがあります。インスタンスは、そのインスタンスに保存されているすべての状態と一緒に破棄されます。ユーザーがアプリを再起動すると、アクティビティは予期せずクリーンな状態になります。プロセス終了について詳しくは、プロセスとアプリのライフサイクルをご覧ください。状態を保存し、復元する必要があります。エクスペリエンスに影響を与える次の項目によって異なります。関連データを保存および管理することをおすすめします。データに迅速にアクセスでき、回転やウィンドウのサイズ変更などの一般的な設定が変更されても、ネットワークやディスクからはデータが再取得されなくなります。ガイドをご覧ください。データがメモリに保持されます。ディスクやネットワークからデータを取得するよりもコストがかかりません。アクティビティ(または他のライフサイクル所有者)に関連付けられ、設定の変更中、これはメモリに保持されます。インスタンスに、システムによって関連付けられます。呼び出したときに自動的に破棄されます。したシナリオでは、ユーザーの期待どおりに状態がクリアされます。システムによって開始されたプロセスの終了時に破棄されます。保管して、システムの終了後にビューモデルがデータを再読み込みできるようする必要があります。使用する必要はありません。コントローラの状態を再読み込みするのに必要なデータが保存されます。ガイドのアクティビティの状態の保存と復元に関するトピックをご覧ください。よってデータがディスクにシリアル化されるため、保存容量と速度によって制限されます。シリアル化されるオブジェクトが複雑な場合、シリアル化によって大量のメモリが消費されることがあります。このプロセスは構成の変更時にメインスレッドで実行されるため、シリアル化に時間がかかりすぎるとフレームが欠けたり、映像が途切れたりすることがあります。大量のデータ(ビットマップや、冗長なシリアル化やシリアル化解除を必要とする複雑なデータ構造など)の保存には使用しないでください。シンプルな小さなオブジェクトのみを保存します。)の保存に使用します。システムによって開始されたプロセスの終了を処理できるように、ほとんどのアプリに実装する必要があります。使用する必要がまったくない場合もあります。ユーザーがブラウザを終了する前に閲覧していたウェブページがブラウザに再び表示されることがあります。使用する代わりに、すべてをローカルで保持できます。インテントからアクティビティを開くと、設定の変更時、およびシステムがアクティビティを復元するときに、エクストラのバンドルがアクティビティに配信されます。バンドルの代わりにエクストラのバンドルを使用できます。フィルタをご覧ください。使用して、設定の変更時にデータベースからデータを再読み込みするサイクルを無駄にしないようにしてください。使用して状態データを保持できます。オブジェクトの保存済み状態へのアクセスを提供できるようになりました。呼ばれるオブジェクトを介してアクセスできます。ライフサイクル対応コンポーネントのコードラボをご覧ください。ストレージは、アプリがユーザーのデバイスにインストールされている間は(ユーザーがアプリのデータを削除しない限り)存続します。ストレージからメモリに読み込む必要があるため、取得に時間がかかることがあります。アーキテクチャの一部になっている可能性があります。ストレージの代わりにはなりません。状態のみを一時的に保存するときに使用してください。他のアプリのデータには、永続ストレージを使用する必要があります。ガイドをご覧ください。状態を効率的に保存および復元するには、さまざまなタイプの永続メカニズム間で作業を分割します。ほとんどの場合、これらのメカニズムではそれぞれ異なるタイプのデータが、データの複雑さ、アクセス速度、ライフタイムのトレードオフに基づいてアクティビティで使用され保存されます。アクティビティの開始および終了時に失いたくないデータすべてが保存されます。曲オブジェクトのコレクション。これには、音声ファイルやメタデータが含まれる可能性があります。コントローラを表示するのに必要なすべてのデータがメモリに保存されます。最近の検索結果の曲オブジェクト、最近の検索クエリ。コントローラが停止された後に再作成されるときに、アクティビティの状態を簡単に再読み込みするのに必要な少量のデータが保存されます。ストレージに保存します。最近の検索クエリの保存。例として、曲のライブラリを検索できるアクティビティについて考えてみましょう。各種のイベントは次のように処理されます。よって即座に委任が実行され、そのデータがローカルに保存されます。オブジェクト内のデータを更新して追加の曲が反映されるようにする必要もあります。データベースへの挿入はすべて、メインスレッドから切り離して行ってください。オブジェクトに即座に保存する必要があります。オブジェクトに保存する必要もあります。バンドルに保存する必要があります。この少量のデータは簡単に保存できます。アクティビティを現在の状態に戻すのに必要な情報はこれだけです。アクティビティがシステムによって停止された後に再作成されるケース。検索結果がキャッシュされていないことを確認し、渡された検索クエリを使用して検索結果の読み込みを委任します。構成の変更後にアクティビティが作成されるケース。バンドルに保存します。よってすでにキャッシュされています。渡すと、必要なデータがすでに読み込まれていること、データベースに対してクエリを再実行する必要がないことが確定します。オブジェクトは空です。オブジェクトを作成したら、空のクエリを渡します。オブジェクトに伝わります。したがって、アクティビティは空の状態で開始されます。状態の保存について詳しくは、以下のリソースをご覧ください。