【问题标题】:How can I know an activity is going to be killed by OS?我怎么知道一个活动会被操作系统杀死?
【发布时间】:2011-03-08 00:08:19
【问题描述】:

我知道我可以在 onPause() 中使用 isFinishing() 来了解活动是否会被 finish() 杀死。

那么,我怎么知道某个活动会因为内存不足而被操作系统暂时终止呢?

谢谢。

【问题讨论】:

    标签: android


    【解决方案1】:

    根据docsonDestroy 应该在 Activity 被销毁之前调用,无论原因如何。如果请求完成,isFinishing 将返回 true。所以如果它是假的,你可以假设系统需要完成。

    但是,正如文档中所说的那样

    注意:不要指望这种方法 被称为储蓄的地方 数据!

    一般来说,你不能保证你的 Activity 会被很好地杀死。诸如任务杀手之类的东西会扰乱生命周期。

    使用onPauseonSaveInstanceState 正确保存内容。

    【讨论】:

    • 查看此文档,developer.android.com/reference/android/app/…。检查此活动是否正在完成过程中,或者是因为您在其上调用了 finish() ,或者其他人已请求它完成。这通常用于 onPause() 来确定活动是简单地暂停还是完全结束。 isFinishing() 也是如此,如果操作系统正在终止活动。我说的对吗?
    • 我读到这意味着如果操作系统正在杀死它,那将是不正确的,但我自己并没有实际测试过。为什么你需要知道操作系统是否正在杀死它?
    【解决方案2】:

    你不能。

    您的活动可能会在您的应用程序的其余部分不正常运行的情况下消失,在这种情况下会调用 onDestroy。但是,您的整个应用程序也可能会立即被杀死,这就像 unix 中的 kill -9 一样。您的应用此时无法运行任何代码,它会立即被终止且没有警告。

    为了正确处理此问题,您希望将应用设计为在 onPause 中将所有重要信息保存到磁盘,并准备好稍后在 onCreate 中检索它(如果需要)。

    【讨论】:

    • 看起来 Android 只杀死进程而不是单个活动。请参阅stackoverflow.com/questions/5227071/… 的讨论
    • 这不是“唯一”的事情。如果您的代码仅依赖于 Android 杀死进程(应用程序),那就错了。如果您的代码仅依赖于 Android 杀死活动,那就错了。处理任何一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多