XML驱动的GUI和性能

时间:2012-01-06 16:15:24

标签: android xml performance android-layout

阅读Online Developer Guide page on XML layouts,我发现了以下声明:

  

您的UI描述位于应用程序代码的外部,这意味着您可以修改或修改它,而无需修改源代码并重新编译。

我知道XML布局和资源的许多优点,但由于XML文件放在APK中,我认为没有重新打包就没有真正的方法来修改GUI。我的意思是,我们大多数人都使用eclipse ADT插件和ANT打包应用程序,因此没有编译类文件没有真正的好处(因为在修改资源文件后,开发人员将不得不重新打包应用程序并生成新的APK文件)。因此,如果不重新部署整个APK,就无法在设备上重新部署GUI。

如果这个假设是真的,那么在APK文件的生命周期中XML文件将是相同的。我想这些文件(特别是布局文件)必须在运行时(在活动的onCreate之前)进行解析和处理,这比以编程方式构建GUI(如Swing)效率低。布局通常不是瓶颈,但如果我是正确的,我会在这里看到一些可以更好地使用的浪费时间(例如,使用动画)。

阅读同一页面,它说:

  

编译应用程序时,每个XML布局文件都会编译为View资源。

检查我的一个APK,我一直在寻找classes.dex内的预编译文件,除了我的java类和R.class文件之外别无他法。布局XML文件位于/res/layout folder内,并且有一个名为resources.arsc的文件,它似乎包含有关其他资源(字符串,图标名称)的信息,但我认为没有任何与视图相关的信息我错了。)

我的问题:

  • 是否预编译了XML布局文件以及哪个文件?
  • 如果没有,是否有编译选项将布局信息完全预编译到文件中以加快加载时间? (理想情况下,这将是一个类文件)
  • 如果没有,有没有办法在第一次执行时创建该文件并将其缓存在应用程序安装文件夹中,以便后续的运行时执行可以读取该文件而不是解析XML并加快时间?

提前致谢。

1 个答案:

答案 0 :(得分:9)

如果您对LayoutInflater的课程文档有所了解,您会注意到他们说:

  

出于性能原因,视图通胀在很大程度上依赖于在构建时完成的XML文件的预处理。因此,目前无法在运行时使用LayoutInflaterXmlPullParser的普通XML文件;它仅适用于从已编译资源(XmlPullParser)返回的R.something file

所以是的,布局文件确实在某种程度上是预编译的,,并且从上面的摘录判断,它将在R$layout.class输出文件中(但我不是100%肯定) 。预编译的布局文件位于已编译的APK包中,为/res/layout/<layout_id>.xml。您会注意到,如果您将其解压缩并在文本编辑器中打开,大多数纯文本XML元素都已映射到某种二进制形式。

这可能与您在AndroidManifest.xml文件中看到的压缩效果相同,而这些文件已打包到APK中。