如何使用Android缓存视图,避免每次都调用onCreate

时间:2009-04-27 10:06:11

标签: android oncreate

我有一个让我烦恼的问题。

使用Android,每次创建一个新的活动实例时,我都会看到一个似乎在调用onCreate的应用程序,因为这个活动是另一个活动的儿子,它在结束时自行完成一个数据的作用。

每次调用onCreate似乎都在重新解析XML以创建视图并重新附加/重新创建代码的侦听器等等。那么,如果我们点击移动设备中的后退按钮,是否有办法缓存每次都要调用的活动,而不会看到它?这就像让它真正隐藏(无法通过后退按钮访问),只有在必要时才会被破坏。

提前感谢大家:)

3 个答案:

答案 0 :(得分:6)

Android将处理最适用的视图和活动缓存,您不必担心它。我 - 强烈反对亚历克夏的做法。这非常幼稚,只会恶化性能,造成内存泄漏,导致错误行为。

如果您觉得Activity经常被创建,我建议您确保正确使用和理解Activity生命周期。与每个系统一样,Android在效率和可重用性之间取得平衡,并且总是需要权衡。

您提到的常见误解涉及解析XML。视图的XML不是作为纯XML存储,而是以编译形式存储以提高效率。您不必担心这一点,相信系统正在努力为您提供尽可能高效的服务。

答案 1 :(得分:1)

如果它被调用,则意味着您的进程已完成执行或被系统杀死。

每次活动开始时都会调用onCreate。这就是Activity lifecycle的工作方式,你可以做的并不多。

如果您希望自己的流程保留在内存中,则应考虑将其实施为Service

答案 2 :(得分:0)

您不能阻止在每次创建活动时调用onCreate,因为这是工作的方式。

这里的问题更多是一个架构问题:你有一个经常使用的功能,但是你会为它投入大量的活动。

如果您正在寻找速度和响应能力,则回答者可以是ViewFlipper。您定义了一个唯一的活动,当您使用您的功能时,您只需更改视图。你整个应用程序一开始就被加载,然后它会留在内存中,直到Dalvik需要一些。您可以在开源应用astrid的代码中找到一个非常复杂的示例。