在XML或java文件中编写相同的代码(用于布局)是否会有性能差异?
我知道在XML和java文件中可以做什么和不能做什么是不同的,但到目前为止,我了解到java文件可以做XML文件可以做的一切,至少我正在阅读的书中写过这一点(见下面的引文) 因此,我的问题是,在用java或xml编写代码时是否会有性能差异,如果是这样的话:两者中哪一个更受欢迎这不是一个关于正确方法的问题,而是一个关于纯性能的问题。 我知道xml代码被编译成java代码,也许这比翻译java代码更有效,因为为xml编写编译器比为java文件编写编译器更容易?(基于这样一个假设,即xml确实更容易解析,因为它更连贯,结构更简单)在XML或java文件中编写相同的代码(用于布局)是否会有性能差异?,java,android,xml,performance,Java,Android,Xml,Performance,我知道在XML和java文件中可以做什么和不能做什么是不同的,但到目前为止,我了解到java文件可以做XML文件可以做的一切,至少我正在阅读的书中写过这一点(见下面的引文) 因此,我的问题是,在用java或xml编写代码时是否会有性能差异,如果是这样的话:两者中哪一个更受欢迎这不是一个关于正确方法的问题,而是一个关于纯性能的问题。 我知道xml代码被编译成java代码,也许这比翻译java代码更有效,因为为xml编写编译器比为java文件编写编译器更容易?(基于这样一个假设,即xml确实更容易解
引述 这是书中的实际引用,该书指出java文件可以完成xml文件所能完成的一切。它首先解释了制作用户界面有两种方法,即声明式和编程式: 声明性方法涉及使用XML声明UI的内容 看起来像 编程用户界面涉及编写Java代码来开发UI 您可以通过声明方式执行的所有操作,也可以通过编程方式执行
事实是:在UI线程中所做的一切都会减慢UI的速度。因此,如果以编程方式声明布局,则会减慢主线程的速度,如果不在主线程上创建视图,则无法添加视图(如果我错了,请有人纠正我)。如果可能的话,尽量避免这种情况 这也涉及到这个问题 与xml设计相比,用Java代码完成所有视图需要花费太长的时间,而xml更容易理解,如果您使用的是AndroidStudio或ADT,您的IDE中有一个可视化编辑器。我强烈建议您使用xml来设计应用程序的活动/片段 编辑1 这个问题解决了UI线程中的视图创建问题 编辑2 为了澄清这一点,Android在膨胀时确实“以编程方式”创建视图。真正大的操作差异是,当你膨胀一个完整的布局时,Android会重新使用一些组件,而编程方式并不能保证这一点 这是 编辑3 正如@pskink所指出的,我刚刚查看了LayoutInflater#createView(字符串名称、字符串前缀、AttributeSet attrs)的代码,它调用了Java的类加载器。如果类不在内存中,则此加载程序将创建一个类,因此以编程方式使用createView的效率与使用xml的效率一样低。因此,对于UI来说,使用xml布局的速度与以编程方式膨胀视图的速度一样慢,这样就不会影响性能
这个答案有一个“但是”,适配器有不同的工作方式,因为它们重复使用视图。也许没有有效或适当的方式来衡量
xml
布局和java
代码之间的性能差异。但是为了方便开发,我决定使用xml
而不是java
代码。毕竟,您有调色板
可以立即呈现xml
布局文件。当您编写xml
时,还有Smart-recomment
s小部件属性。您还可以拖放小部件。但是,在编写java
文件来布局小部件时,您能做到这一点吗?当一个结构过于复杂时,你会写多少行?我不会太在意XML和编程设计的UI之间的性能差异
基本上,XML方法总是优于编程方法。XML设计的UI更易于阅读和理解,而且由于UI是可视化的,我甚至可以说可读性是开发可扩展和可维护UI的关键
编程方法可读性方面最糟糕的情况是UI的每个元素都设计在不同的文件中。设想一个元素在一个文件中设计,然后添加到另一个文件中的表单中,表单也在另一个文件中设计。你不知道这是怎么回事,对于一个简单的更改,比如添加一个按钮或标签,甚至只是更改一些文本,你将不得不经历大量的代码
这意味着您将在该UI的进一步开发中损失大量时间,并且在某些情况下它将根本无法维护(好吧,您可能能够维护它,但是想象一下一个有许多开发团队参与的大型项目,其中不止一个人需要理解概念和结构才能保持开发的进行)
当然,您不能总是用XML设计UI。例如:如果您有自定义的模块化控件元素,这些元素比文本的显示更复杂,并且您希望动态显示它们的数量,这取决于数据库查询的结果,那么我保证您必须以编程方式将它们添加到表单中。ELSE您必须在XML格式的表单中添加一个固定的最大数量,然后向它们提供数据并在代码中切换它们的可见性。相信我,您不会想这样做;)现在回答您的问题:我说XML方法比较慢。由于XML必须容纳尽可能多的对象以供显示,因此在生命周期中加载和维护的对象的开销总是很大,而这些对象甚至没有被使用。动态生成的对象的性能成本较低,因为它们的数量不同,因此不是固定的
编辑:如果你非常关心你的用户界面的性能,我建议你做一些关于生命周期的研究