【问题标题】:Android lifecycle issueAndroid生命周期问题
【发布时间】:2014-10-01 09:41:41
【问题描述】:

阅读有关 Activity 生命周期的官方文档后,我遇到了一个问题 - 我如何在 onDestroy() 中了解我的 Activity 是被系统杀死还是被用户完成?我认为,在官方页面上并不完全清楚:

如果一个活动被暂停或停止,系统可以将它从 通过要求它完成(调用它的 finish() 方法)来存储内存,或者 简单地杀死它的进程。当活动再次打开时(之后 被完成或被杀死),它必须被重新创建。

但是下一篇关于 onDestroy() 的文章有点低:

在活动被销毁之前调用。这是最后的电话 活动将收到。它可以被称为是因为 活动正在结束(有人在上面调用了finish()),或者因为 系统正在临时销毁该活动实例以保存 空间。您可以通过以下方式区分这两种情况 isFinishing() 方法。

所以,我建议,在杀死我的活动期间,系统可以调用完成()(那么我如何区分 - 我的活动是被系统杀死还是由用户在 onDestroy()中完成?

【问题讨论】:

标签: android android-lifecycle


【解决方案1】:

onDestroy() 不能保证被调用(例如,您的应用程序在后台并且操作系统实际上会杀死它以获取资源),因此您没有任何理由在这里检查isFinishing()

onPause() 中处理你需要做的事情,如果你想知道它是否会继续完成,请查看isFinishing()

如果您想在用户触发应用程序结束的特定场景中执行更多操作,请将其添加到 onUserLeavesHint(),它将在 onPause() 之前调用 - 如果这些事情需要在某些你在onPause() 中所做的事情,那么你可以在Activity 中设置一个boolean 标志,从一开始就设置为false,然后在onUserLeavesHint() 中设置为true,并在你的onPause() 中查询。

【讨论】:

    【解决方案2】:

    系统在终止您的活动时不会调用 finish()。如果 isFinishing() 返回 true,则应用程序的某些部分调用了 finish() 或用户按下了返回按钮。

    【讨论】:

    • “你的应用程序的一部分”是什么意思?
    • 基本上应用程序中的任何代码都可以调用 Activity.finish - 活动本身、另一个活动、某些服务、广播接收器等。
    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 2015-03-23
    • 1970-01-01
    相关资源
    最近更新 更多