4

オープンソースの Android プロジェクトを研究しているときに、この質問があります。

「onCreate」メソッドで別のアクティビティ A2 を呼び出すアクティビティ A1 があります。ただし、「startActivity / startActivityForResult」メソッドの前後にコード ステートメントがあります。「startActivity/startActivityForResult」メソッド以降のA1での実行シーケンスがわかりません。

A1 のコード フレームワークを以下に示します。

public void onCreate(Bundle bundle) {
   <code statements before>
   this.startActivityForResult(.....);  // Start A2 here.
   <code statements after>
}

public void onResume() {
   <code statements>
}

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
   <code statements>
}
.....

A1がA2を呼び出す前に最初に実行サイクル(つまり、「onCreate」->「onStart」->「onResume」->「onPause」->「onStop」)を終了するのか、それとも最初に「onCreate」を終了してからA2を呼び出すのか疑問に思いますA2を呼び出すか、または他の実行ロジックがありますか?

また、A2がリターン(終了)し、A1のonActivityResultが呼び出された場合、A1はonActivityResultメソッドを実行後、onRestart→onStart→onResumeを実行するのでしょうか?

A1 と A2 の両方に独自の UI があるため、2 つのアクティビティが 2 つの異なるスレッドで同時に実行されない可能性があると思います。この場合の正確な実行シーケンスを知っている人はいますか?

ご提案いただきありがとうございます。

4

2 に答える 2

12

2つの非常に単純なAndroidアクティビティを使用してこの状況をシミュレートし、以下の結果を得ました。

以下は、AndroidがアクティビティA1のメソッド内で「startActivity」/「startActivityForResult」を実行して別のアクティビティA2を開始するとどうなるかを示しています。

  1. 別のアクティビティA2を起動する意図があることを認識します。
  2. 現在のメソッドの最後まで実行されます(目的のアクティビティA2に直接ジャンプすることはありません)。
  3. 次に、現在のアクティビティA1の「onPause」メソッドを呼び出し(現在の状態を保存できるようにするため)、現在のアクティビティを終了します。
  4. これで、意図されたアクティビティA2が開始され、その「onCreate」->「onStart」->「onResume」メソッドシーケンスが呼び出されます。
  5. 呼び出されたアクティビティA2が画面全体をカバーしている場合、最初の呼び出しアクティビティA1の「onStop」メソッドをここで呼び出すことができます。
  6. 呼び出されたアクティビティA2が「singleTask」アクティビティであり、A1がスタック内のA2の上にある場合(「singleTask」アクティビティの上にあるすべてのアクティビティが破棄される場合)、最初の呼び出しアクティビティA1の「onDestroy」メソッドをここで呼び出すことができます。 「singleTask」アクティビティが前面に表示されたとき)。

他の人にも役立つことを願って、ここに書き留めておきます。

于 2012-05-12T08:40:46.690 に答える
2

これらは異なるスレッドでは実行されず、どちらもメインの UI スレッドで実行されます。onResume() と onPause() が Android ライフサイクルのドキュメントで説明されているようにいつ/いつ呼び出されるかは保証できませ

アクティビティの onCreate() で別のアクティビティを開始する場合は、A1 UI がロードされていないことを想定する必要があります (初回)。A2 が結果を返したときに表示されるはずです。

それ以外は、自分で試してみることをお勧めします。

于 2012-05-12T03:10:57.150 に答える