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

标签 android android-activity

在研究一个开源的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时会发生什么,

  1. 它会认识到现在有启动另一个 Activity A2 的 Intent ,
  2. 它将执行到当前方法的末尾(它不会直接跳转到预期 Activity A2),
  3. 然后它会调用当前 Activity A1 的“onPause”方法(以允许我们保存当前状态)然后离开当前 Activity ,
  4. 它现在将启动预期 Activity A2 并调用其“onCreate”->“onStart”->“onResume”方法序列,
  5. 如果调用的 Activity A2 已经覆盖了整个屏幕,则可以在此处调用初始调用 Activity A1 的“onStop”方法,
  6. 如果被调用的 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/

相关文章:

android - ArrayAdapter getView() 方法如何工作?

java - 字符串资源未传递给静态应用程序 Java 类

android - 如何在 android 中使用 RxJava 在 Activity 之间传递数据?

android - 将数据从一个 Activity fragment 传递到另一个 Activity fragment

java - 如何在 android 中以编程方式添加或删除 intent 过滤器?

android - 我在带有 kotlin 的 android studio 中有错误

android - android中多种listview布局行的通用适配器

android - 无法在 xamarin MVVMCROSS 中从 android.support.v4.app.Fragment 转换为 android.app.Fragment

安卓 :Why the Activity is in onPause?

android - 区分 Application 对象与 Android 上的 Activity 和 BroadcastReceiver