Android --- startActivity或startActivityForResult将如何影响当前活动的逻辑流程?

时间:2012-05-12 02:55:41

标签: android android-activity

我在研究开源Android项目时有这个问题。

我有一个活动A1,在其“onCreate”方法中调用另一个活动A2。但是,在“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是否会首先完成其执行周期(即“onCreate” - &gt;“onStart” - &gt;“onResume” - &gt;“onPause” - &gt;“onStop”)才会调用A2,或者在调用A2之前首先完成“onCreate”,还是有其他执行逻辑?

此外,当A2返回(完成)并且A1中的“onActivityResult”被调用时,A1将执行“onRestart” - &gt; “onStart” - &gt;执行“onActivityResult”方法后“onResume”?

因为A1和A2都有自己的UI,我认为2个活动可能无法与两个不同的线程同时执行。有没有人知道这种情况下的确切执行顺序?

提前感谢任何建议。

2 个答案:

答案 0 :(得分:12)

我使用2个非常简单的Android活动模拟了这种情况,并得到了以下结果。

以下是当Android在活动A1的方法中执行“startActivity”/“startActivityForResult”以启动另一个活动A2时会发生的情况,

  1. 它会认识到现在有意触发另一个活动A2,
  2. 它将执行到当前方法的结尾(它不会直接跳转到有意的活动A2),
  3. 然后它将调用当前活动A1的“onPause”方法(以允许我们保存当前状态),然后保留当前活动,
  4. 现在它将启动意图活动A2并将其称为“onCreate” - &gt; “onStart” - &gt; “onResume”方法序列,
  5. 如果被调用的活动A2覆盖了整个屏幕,则可以在这里调用初始调用活动A1的“onStop”方法,
  6. 如果被调用的活动A2是“singleTask”活动并且A1位于堆栈中的A2之上(所有活动位于“singleTask”活动之上),则可以在此调用初始调用活动A1的“onDestroy”方法当“singleTask”活动被带到前面时,它将被销毁。
  7. 我在这里写下来希望它可能对其他人有所帮助。

答案 1 :(得分:2)

它们不会在不同的线程上执行,两者都将在主UI线程上。您无法保证何时/如果onResume()和onPause()将被调用,如Android生命周期文档here中所述。

如果您正在活动的onCreate()中启动另一个活动,则应该期望未加载A1 UI(第一次)。当A2返回结果时,您应该会看到它。

除此之外,我建议你试试看,亲自看看。