2010-04-07 35 views
1

我刚刚阅读了一篇非常有趣的文章,关于android(以及我假设其他操作系统)如何在内存不足时工作。这在理论上是如何完成的?它与Java的对象序列化类似吗?“救国”如何运作? (Android)

+0

不要假设其他操作系统:) – Stephen 2010-04-07 02:55:24

回答

1

总之:是的。

再多几个字,排序。你必须手动处理更多的信息,而不是我个人喜欢的。从本质上讲,所有Android为你提供的是一个哈希,用于推送一些由字符串引用的可序列化对象,这在跨应用程序关闭时保证是安全的。因此,无论什么时候发生想要在应用程序关闭时保留的事情,您都有责任更新此保存的状态散列(并让Android知道您已经这样做了)。这包括表单字段中的半文字输入。这意味着你有很多东西要听。

然后,Android会在你的Activity中调用一个特殊的钩子,当它回收你的应用程序并且你需要时,它将处理恢复状态给Activity。对于所有的回收来说都不会发生这种情况 - 您的应用程序存在各种各样的存在/存在状态。

因为你需要做这种繁琐的工作,所以Android会变得懒惰,并且像屏幕旋转一样将其作为应用程序的完整循环来实现。

我让它听起来比真的更糟,一旦你习惯了它;在Java和移动计算的范围内解决问题真的不是一个好方法。

当然,这是关于Android的回应。其他(桌面)操作系统依靠虚拟内存和寻呼来处理内存限制。

+0

由于很好的理由,屏幕旋转被实现为完整的回收:这使得应用程序可以轻松地为不同的配置(字符串,布局,图像等)重新加载所有资源手动替换内存中的大量变量。 此外,所有默认的Android小部件都内置了对持久性的支持。任何带有id的小工具都会自动保存它的状态(这包括文本输入字段btw ...)。 – 2010-04-07 04:57:59

+0

保存其状态的文本输入字段是新的。 正如我所说,这不是一个穷人的解决方案。它看起来效率非常低。他们的布局引擎真的不够复杂,无法确定要使用两套维度和资源中的哪一套? (答案是肯定的,但并不一定如此。) – 2010-04-07 07:46:48