【问题标题】:State of Activity while in onActivityResult question在 onActivityResult 问题中的活动状态
【发布时间】:2011-02-20 18:27:38
【问题描述】:

我在 onActivityResult 中对 Activity 的状态有疑问。具体来说,是否“保证”在 onActivityResult 之前为 Activity 调用了 onRestoreInstanceState 或 onCreate?换句话说,假设 Activity 的状态数据(成员变量等)在 onActivityResult 中“可用”(假设您已正确处理 onRestoreInstanceState 和/或 onCreate)是否安全?

【问题讨论】:

    标签: android android-activity


    【解决方案1】:

    在我的应用中,我得到以下工作流程:

    onCreate
    onStart
    onRestoreInstanceState
    onActivityResult
    onResume
    

    所以,是的,onActivityResult 是在 onRestoreInstanceState 之后调用的,所以你可以指望状态已经完全恢复(除非你在 onResume 中做某事)。

    【讨论】:

    • 谢谢,这样做是有道理的,但我只是在仔细检查,因为我在任何地方都找不到它的记录。
    • onActivityResult 在 onStart 之前调用,以防您启动另一个活动以获得结果并返回初始活动
    • 操作系统在后台不会杀死活动;它宁愿杀死整个过程
    • @MarianPaździoch,谢谢,刚刚编辑并删除了令人困惑的句子。它写于 2011 年,当时我最初认为(由于 (a) 来自 Google 的误导性文档和 (b) 开发人员选项允许强制执行此类行为)操作系统可以杀死单独的活动。
    【解决方案2】:

    使用 startActivityForResult 启动另一个活动的活动完全处于活动状态,只是它失去了焦点 - 即它没有接收到触摸输入。如果您要使用此方法启动一个透明 Activity,您会看到第一个 Activity 仍在后台执行其动画等。

    【讨论】:

    • 调用startActivityForResult后,调用onSaveInstanceState。 Android 调用它,以便如果它需要从内存中删除 Activity,它可以稍后恢复它(通过 onRestoreInstanceState 或 onCreate 在包中提供状态信息)。因此,尽管在您调用 startActivityForResult 后 Activity 可能仍在运行,但我不相信您可以保证一旦新 Activity 启动它就不会被 Android 杀死。所以,我的问题是,如果 Android 需要调用 onRestoreActivityState 或 onCreate,那总是在调用 onActivityResult 之前还是之后?
    • onActivityResult 更像是一个等待输入的监听器,所以我的猜测是这两个活动都可以在没有执行 onActivityResult 的情况下被杀死。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    相关资源
    最近更新 更多