XML驱动的GUI和性能

Mis*_*ith 8 xml performance android android-layout

阅读关于XML布局在线开发者指南页面,我发现了以下声明:

您的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并具有更快的加载时间?

提前致谢.

sly*_*fox 9

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

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

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

它可能与您在AndroidManifest.xml打包到APK 中的文件中看到的压缩类型相同.