Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在XML或java文件中编写相同的代码(用于布局)是否会有性能差异?_Java_Android_Xml_Performance - Fatal编程技术网

在XML或java文件中编写相同的代码(用于布局)是否会有性能差异?

在XML或java文件中编写相同的代码(用于布局)是否会有性能差异?,java,android,xml,performance,Java,Android,Xml,Performance,我知道在XML和java文件中可以做什么和不能做什么是不同的,但到目前为止,我了解到java文件可以做XML文件可以做的一切,至少我正在阅读的书中写过这一点(见下面的引文) 因此,我的问题是,在用java或xml编写代码时是否会有性能差异,如果是这样的话:两者中哪一个更受欢迎这不是一个关于正确方法的问题,而是一个关于纯性能的问题。 我知道xml代码被编译成java代码,也许这比翻译java代码更有效,因为为xml编写编译器比为java文件编写编译器更容易?(基于这样一个假设,即xml确实更容易解

我知道在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必须容纳尽可能多的对象以供显示,因此在生命周期中加载和维护的对象的开销总是很大,而这些对象甚至没有被使用。动态生成的对象的性能成本较低,因为它们的数量不同,因此不是固定的

编辑:如果你非常关心你的用户界面的性能,我建议你做一些关于生命周期的研究