2

3つのアクティビティを持つ単純なアプリケーションがあります。

  • 1つ目は、Webサービスを呼び出し、以下の結果(レストラン)をリストビューに表示する検索ボックスを含みます。
  • レストランをクリックすると、別のアクティビティが開始され、レストランの説明と[地図を表示]ボタンが表示されます。
  • [地図を表示]ボタンをクリックすると、3番目のアクティビティで地図が表示されます。

すべてのデータは、Webサービス(レストランの説明と座標)によって最初のアクティビティで読み込まれ、各アクティビティに必要なデータは、を使用してバンドルで渡されintent.putExtraます。

これで、ライフサイクルについてはまだ何もしていませんが、クリックするとすべてがスムーズに実行されるように見えます(たとえば、マップから戻るボタンをクリックすると、すべてのデータセットでアクティビティがback button再開されます)。restaurant description

なんで?すべての変数は自動的に保存されますか?とにかく使用する必要がonSaveInstanceState()ありますか?onRestoreInstanceState()

ありがとう

7月

4

2 に答える 2

0

新しいアクティビティBが別のアクティビティAの上で開始されると、アクティビティAはデフォルトでは破棄されず、停止され、その後再開するだけです。システムにリソースが必要な場合、停止したアクティビティを破棄できます。ここには、コンポーネントのライフサイクルを実際に説明する素晴らしいグラフがあります。

于 2010-06-14T16:08:18.370 に答える
0

アクティビティが停止すると、Activityオブジェクトはメモリに常駐し、アクティビティが再開すると呼び出されます。Resumed状態に至るまでのコールバックメソッドのいずれかで作成されたコンポーネントを再初期化する必要はありません。システムはレイアウト内の各ビューの現在の状態も追跡するため、ユーザーがEditTextウィジェットにテキストを入力した場合、そのコンテンツは保持されるため、保存して復元する必要はありません。

システムが停止中にアクティビティを破棄した場合でも、バンドル(キーと値のペアのブロブ)内のViewオブジェクト(EditTextのテキストなど)の状態を保持し、ユーザーがに戻った場合にそれらを復元します。アクティビティの同じインスタンス)。

http://developer.android.com/training/basics/activity-lifecycle/stopping.html

デフォルトでは、システムはBundleインスタンスの状態を使用して、アクティビティレイアウト内の各Viewオブジェクトに関する情報(EditTextオブジェクトに入力されたテキスト値など)を保存します。したがって、アクティビティインスタンスが破棄されて再作成された場合、レイアウトの状態は、コードを必要とせずに以前の状態に復元されます。ただし、アクティビティには、ユーザーのアクティビティの進行状況を追跡するメンバー変数など、復元したい状態情報がさらに含まれている場合があります。

注:Androidシステムがアクティビティ内のビューの状態を復元するには、各ビューにandroid:id属性で指定された一意のIDが必要です。

アクティビティ状態に関する追加データを保存するには、onSaveInstanceState()コールバックメソッドをオーバーライドする必要があります。

http://developer.android.com/training/basics/activity-lifecycle/recreating.html

于 2012-12-12T15:36:38.677 に答える