在研究一个开源的Android项目时,我有这个疑问。
我有一个 Activity A1,它在其“onCreate”方法中调用另一个 Activity 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 是否会在调用 A2 之前首先完成其执行周期(即“onCreate”->“onStart”->“onResume”->“onPause”->“onStop”),或者只是首先完成“onCreate”在调用A2之前,还是有其他的执行逻辑?
另外,当A2返回(完成)并调用A1中的onActivityResult时,A1会不会在执行完onActivityResult方法后,再执行onRestart -> onStart -> onResume?
因为A1和A2都有自己的UI,我觉得2个activity可能不会用两个不同的线程同时执行。在这种情况下,有人知道确切的执行顺序吗?
提前感谢您的任何建议。
最佳答案
我使用 2 个非常简单的 Android Activity 模拟了这种情况,并得到了以下结果。
以下是当Android在一个activity A1的方法中执行“startActivity”/“startActivityForResult”以启动另一个activity A2时会发生什么,
- 它会认识到现在有启动另一个 Activity A2 的 Intent ,
- 它将执行到当前方法的末尾(它不会直接跳转到预期 Activity A2),
- 然后它会调用当前 Activity A1 的“onPause”方法(以允许我们保存当前状态)然后离开当前 Activity ,
- 它现在将启动预期 Activity A2 并调用其“onCreate”->“onStart”->“onResume”方法序列,
- 如果调用的 Activity A2 已经覆盖了整个屏幕,则可以在此处调用初始调用 Activity A1 的“onStop”方法,
- 如果被调用的 Activity A2 是一个“singleTask” Activity 并且 A1 在堆栈中位于 A2 之上(所有 Activity 都在“singleTask” Activity 之上),则可以在此处调用初始调用 Activity A1 的“onDestroy”方法当“singleTask” Activity 被带到前面时将被销毁)。
写在这里希望对大家有帮助。
关于Android --- startActivity 或 startActivityForResult 将如何影响当前 Activity 的逻辑流程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10560689/