阅读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
的文件,它似乎包含有关其他资源(字符串,图标名称)的信息,但我认为没有任何与视图相关的信息我错了。)
我的问题:
提前致谢。
答案 0 :(得分:9)
如果您对LayoutInflater的课程文档有所了解,您会注意到他们说:
出于性能原因,视图通胀在很大程度上依赖于在构建时完成的XML文件的预处理。因此,目前无法在运行时使用
LayoutInflater
和XmlPullParser
的普通XML文件;它仅适用于从已编译资源(XmlPullParser
)返回的R.something file
。
所以是的,布局文件确实在某种程度上是预编译的,,并且从上面的摘录判断,它将在预编译的布局文件位于已编译的APK包中,为R$layout.class
输出文件中(但我不是100%肯定) 。/res/layout/<layout_id>.xml
。您会注意到,如果您将其解压缩并在文本编辑器中打开,大多数纯文本XML元素都已映射到某种二进制形式。
这可能与您在AndroidManifest.xml
文件中看到的压缩效果相同,而这些文件已打包到APK中。