【问题标题】:Can onActivityResult() be called before onCreate()?onActivityResult() 可以在 onCreate() 之前调用吗?
【发布时间】:2020-07-27 16:57:34
【问题描述】:

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

  1. 活动 A 正在运行并启动活动 B 以获得结果
  2. 活动 B 打开
  3. 设备内存不足,因此破坏了活动 A
  4. 活动 B 以结果结束

现在会发生什么?活动 A 是在收到结果之前重新创建,还是在onCreate() 之前收到结果?这是否保证每次都是相同的顺序?

【问题讨论】:

    标签: android android-activity android-lifecycle


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢,这正是我所需要的。澄清一下 - 这些调用是否每次都以相同的顺序进行?
    • 是的,总是按这个顺序。
    【解决方案2】:

    那些情况下使用

    registerForActivityResult()
    

    Activity Result API 将结果回调与 您启动其他活动的代码。作为结果回调 重新创建流程和活动时需要可用, 每次您的回调必须无条件注册 活动被创建,即使启动其他活动的逻辑 仅基于用户输入或其他业务逻辑发生

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

    【讨论】:

      猜你喜欢
      • 2012-07-15
      • 1970-01-01
      • 2017-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多