【问题标题】:What is holding my activity's state once my application process has been killed?一旦我的应用程序进程被杀死,我的活动状态是什么?
【发布时间】:2012-09-18 00:04:08
【问题描述】:

我一直在通过运行一个占用内存的应用程序来测试我的程序的行为,该应用程序会强制我的应用程序被终止。在阅读了Where is the bundle of onSaveInstanceState saved? 的答案后,我对我看到的一些结果感到困惑。

该链接中给出的两个答案都暗示,当需要回收内存时,会破坏单个活动,而不是应用程序。但是根据http://developer.android.com/guide/components/processes-and-threads.html,进程——而不是单个活动——被杀死了。而且由于所有组件通常在同一个进程中运行,我希望整个应用程序在内存不足的情况下被杀死。我的测试与 Android 文档一致,因为当我运行我的内存消耗应用程序时,我不再看到进程正在运行。

因此,如果整个过程被终止,我是否正确假设该问题中给出的答案不正确?但是,如果是这样,如果进程被终止,当我恢复我的应用程序时,是什么让我的 Bundle 存在?真的保证永远不会写入磁盘吗?

【问题讨论】:

  • “我一直在通过运行一个占用内存的应用程序来测试我的程序的行为,该应用程序会强制我的应用程序被终止。”现在设备上的调试选项中有一个选项可以在暂停时销毁所有活动。

标签: android android-activity


【解决方案1】:

该链接中给出的两个答案都暗示,当需要回收内存时,会销毁单个活动,而不是应用程序。

这是不正确的,虽然我自己在这一点上困惑了很长时间。

恕我直言,该问题的三个答案最多是其中之一“暗示当需要回收内存时,会破坏单个活动,而不是应用程序”。

但是如果是这样,如果进程被终止,当我恢复我的应用程序时,是什么让我的 Bundle 保留?

有时,没有什么是“保留 [您的] Bundle”。其他时候,操作系统的核心过程是“保留 [your] Bundle”。

真的保证永远不会写入磁盘吗?

不是“保证”,因为它没有记录是否写入磁盘。如果它写入磁盘,它将由操作系统进程(不是你的)完成,并且该文件应该不被其他进程读取。

【讨论】:

  • 虽然第一个答案没有明确说明单个活动被杀死,但它确实说捆绑包“在收集内存时与应用程序一起被销毁”。由于进程(以及扩展的应用程序)被破坏,但捆绑显然没有,我认为该陈述是错误的?
  • @MasterNES:是的,我同意引用的陈述是错误的。
【解决方案2】:

正如今天的文档所说,保存的实例状态已序列化到磁盘。

https://developer.android.com/topic/libraries/architecture/saving-states#options_for_preserving_ui_state

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 2012-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多