2012-05-12 3 views
4

オープンソースのAndroidプロジェクトを勉強しているときにこの質問があります。Android --- startActivityまたはstartActivityForResultは、現在のアクティビティのロジックフローにどのように影響しますか?

私は、 "onCreate"メソッドで別のアクティビティA2を呼び出すアクティビティA1を持っています。ただし、 "startActivity/startActivityForResult"メソッドの前後にコードステートメントがあります。私は "startActivity/startActivityForResult"メソッドの後にA1で実行シーケンスを知りません。

A1のためのコードの枠組みを以下に示します。 - > "ONSTART" - > "onResume" - > "onPause"

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> 
} 
..... 

を私は "のonCreate" すなわち(A1は、まずその実行サイクルを終了するかどうかを疑問に思います - > "onStop")、A2を呼び出すか、最初にA2を呼び出す前に "onCreate"を終了するか、他の実行ロジックを持っていますか?

さらに、A2が返され、A1の "onActivityResult"が呼び出されると、 "onActivityResult"メソッドの実行後、A1は "onRestart" - > "onStart" - > "onResume"を実行しますか?

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

ご意見ありがとうございます。

+0

[**アクティビティライフサイクル**](http://developer.android.com/reference/android/app/Activity.html)がどのように役立つかを理解することは役に立ちます。 –

答えて

2

これらは異なるスレッドでは実行されません。どちらもメインのUIスレッドにあります。 Androidライフサイクルドキュメントhereに記載されているように、onResume()およびonPause()が呼び出されるタイミングを保証することはできません。

アクティビティのonCreate()で別のアクティビティを開始する場合は、A1 UIが読み込まれていないことが必要です(初めて)。 A2が結果を返すとき、それを見ることを期待するべきです。

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

12

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

以下はAndroidが別のアクティビティA2を開始するアクティビティA1のメソッド内で「startActivity」/「startActivityForResult」を実行するとき、何が起こるかです

  1. それは今火の意思があることを理解するであろう別のアクティビティA2、
  2. 現在のメソッドの最後まで実行されます(意図したアクティビティA2に直接ジャンプしません)。
  3. 次に、現在のアクティビティA1の "onPause"メソッドを呼び出します現在の状態を保存する)、現在のアクティビティを終了します。
  4. インテントアクティビティA2を開始し、その "onCreate" - > "onStart" - > "onResume"メソッドシーケンスを呼び出すと、
  5. 最初の呼び出しアクティビティA1の "onStop"メソッドは、
  6. 呼び出されたアクティビティA2が "singleTask"アクティビティであり、A1がスタック内のA2の上にある(すべてのアクティビティ)場合、最初の呼び出しアクティビティA1の "onDestroy"メソッドをここで呼び出すことができる"singleTask"アクティビティの最前面にある "singleTask"アクティビティが前面に来ると、そのアクティビティは破壊されます。

他人に役立つことを希望してここに書きます。

+0

超細部!大好きです! –

+0

ちょうど私が欲しかった。ありがとうございました。私たちも同様に試すことができるようにテストコードを投稿できますか? – AKh

関連する問題