我在研究开源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个活动可能无法与两个不同的线程同时执行。有没有人知道这种情况下的确切执行顺序?
提前感谢任何建议。
答案 0 :(得分:12)
我使用2个非常简单的Android活动模拟了这种情况,并得到了以下结果。
以下是当Android在活动A1的方法中执行“startActivity”/“startActivityForResult”以启动另一个活动A2时会发生的情况,
我在这里写下来希望它可能对其他人有所帮助。
答案 1 :(得分:2)
它们不会在不同的线程上执行,两者都将在主UI线程上。您无法保证何时/如果onResume()和onPause()将被调用,如Android生命周期文档here中所述。
如果您正在活动的onCreate()中启动另一个活动,则应该期望未加载A1 UI(第一次)。当A2返回结果时,您应该会看到它。
除此之外,我建议你试试看,亲自看看。