onActivityResult() 可以在 onCreate() 之前调用吗?

Can onActivityResult() be called before onCreate()?

理论上可以在onCreate之前调用onActivityResult()吗?我知道它可以在 onResume() 之前调用,但让我们考虑这种极端情况:

  1. activity A 为 运行 开始 activity B 为结果
  2. activity B开
  3. 设备 运行 内存不足,因此它会破坏 activity A
  4. activity B 以结果结束

现在发生了什么? activity A 是在收到结果之前重新创建,还是在 onCreate() 之前收到结果?保证每次都是一样的顺序吗?

那些案例使用

registerForActivityResult()

Activity Result APIs decouple the result callback from the place in your code where you launch the other activity. As the result callback needs to be available when your process and activity are recreated, the callback must be unconditionally registered every time your activity is created, even if the logic of launching the other activity only happens based on user input or other business logic

更多详情参考Getting a result from an activity

如果您打开应用程序扫描条形码或拍摄照片或视频,您通常会看到这种情况。您启动的 Activity 需要大量资源,因此 Android 终止了托管您的应用程序的 OS 进程。

当您启动的 Activity 想要 return 您的应用程序的结果时,会发生以下情况:

  • Android 为您的应用程序创建一个新的 OS 进程(因为它杀死了您的应用程序并需要一个新进程)
  • Android 实例化 Application 实例(或您的应用程序的自定义实例)并调用 onCreate()
  • Android 实例化 Activity 的新实例,它将获得结果(调用 startActivityForResult() 的实例)
  • Android 在新 Activity 上调用 onCreate()。在这种情况下,传递给 onCreate()Bundle 是最近用于保存 Activity 实例状态(来自 onSaveInstanceState())的 Bundle
  • Android 在新 Activity
  • 上调用 onStart()
  • Android 在新 Activity
  • 上调用 onActivityResult()
  • Android 在新 Activity
  • 上调用 onResume()