Android onSaveInstanceState Bundle

时间:2015-04-09 23:41:40

标签: android memory bundle

当android由于系统限制而杀死你的进程时,它使你能够通过将数据存储在一个包中来跨进程持久化数据。如果你的进程被杀死,这个包保存在哪里?它生活在哪个过程中?它存在于内存中的何处?它存在于内核内存中吗?

1 个答案:

答案 0 :(得分:2)

内核内存是受保护的内存空间,只有内核代码等关键代码才会存在。这是为了防止来自用户和内核的数据的干扰,以及其他性能和设计原因。内核内存将在重新启动后持续存在。

在Bundle中持久保存的数据在onSaveInstanceState()的方法中传递 - 在用户离开Activity之前,而不是在Activity被销毁之前。这可能意味着内存不会写入存储卡等静态存储区。 Bundle确实会以更动态的方式持续存在。

虽然这个问题没有得到直接回答,但看起来这是RAM上的内存。当你看到Android设备的性能时,更新的具有更多RAM的设备似乎能够持续更长时间的应用程序

http://developer.android.com/training/basics/activity-lifecycle/recreating.html的官方文档中可以看出,这个内存是由Android本身跟踪的。

  

默认情况下,系统使用Bundle实例状态进行保存   有关活动布局中每个View对象的信息(例如   输入EditText对象的文本值)。所以,如果你的活动   实例被销毁并重新创建,布局的状态是   恢复到以前的状态,没有您需要的代码。然而,   您的活动可能包含您想要的更多状态信息   恢复,例如跟踪用户进度的成员变量   活动。

     

要保存有关活动状态的其他数据,您必须覆盖   onSaveInstanceState()回调方法。系统调用它   当用户离开您的活动并将其传递给Bundle时的方法   在您的活动被销毁的情况下将保存的对象   不料。如果系统必须稍后重新创建活动实例,   它将同一个Bundle对象传递给onRestoreInstanceState()   和onCreate()方法。

另请注意,当设备关闭时,此Bundle会被破坏。 Android可能有一个特别设计的内存区域,但无论哪种方式它都在RAM中。