XML驱动的graphics用户界面和性能

阅读XML布局的在线开发人员指南页面 ,我发现以下语句:

你的UI描述是你的应用程序代码的外部,这意味着你可以修改或修改它,而不必修改你的源代码并重新编译。

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

如果这个假设是真实的,那么XML文件将在APK文件的生命周期中是相同的。 我猜这些文件(特别是布局的)必须在运行时(在一个activity的onCreate之前)被parsing和处理,这比以编程方式构buildGUI的效率要低(就像在Swing中一样)。 布局通常不是一个瓶颈,但如果我是正确的,我会看到在这里可以更好地使用(例如,与animation)的一个小浪费时间。

阅读同一页面,它说:

在编译应用程序时,每个XML布局文件都被编译到一个View资源中。

检查我的一个APK,我一直在寻找一个预编译的文件在classes.dex ,除了我的java类和R.class文件外,没有什么东西。 布局XML文件位于/res/layout folder ,并且有一个名为resources.arsc的文件,它似乎包含有关其他资源(string,图标名称)的信息,但没有任何与Views相关的信息,我认为(纠正我,米错)。

我的问题:

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

提前致谢。

Solutions Collecting From Web of "XML驱动的graphics用户界面和性能"

如果您在LayoutInflater的类文档中有一个问题 ,您会注意到他们说:

出于性能原因,查看通货膨胀严重依赖于在构build时完成的XML文件的预处理。 因此,在运行时,通过普通的XML文件使用LayoutInflaterXmlPullParser是不可能的。 它只适用于从编译资源( R.something file )返回的R.something file

所以是的,布局文件的确在一定程度上进行了预编译, 从上面的摘录可以看出,它将出现在R$layout.class输出文件中(但我不是100%确定的)。 预编译的布局文件位于编译的APK包中,如/res/layout/<layout_id>.xml 。 你会注意到,如果你提取它,并在文本编辑器中打开它,大多数纯文本XML元素已被映射到一些二进制forms。

这可能与您在AndroidManifest.xml文件中看到的打包到APK中的压缩types相同。