【问题标题】:Android xml vs java layouts performanceAndroid xml vs java 布局性能
【发布时间】:2012-12-02 10:01:18
【问题描述】:

Android SDK 为开发人员提供了在 xml 文件中或直接在 java 代码中编写布局。我读过它,每个人都说 xml 更易于维护和编写更简单,但它们是静态的。否则java布局是动态的,但没有一个cmets性能问题。我发现关于性能的唯一一件事是嵌套布局对性能有负面影响。与其编写嵌套布局,不如制作自定义布局。到目前为止一切顺利;)。

版面设计呢? xml还是java代码? xml 文件是如何在运行时或编译时解析我的 android 的?即使它们在编译时被解析,它们也应该在运行时使用。那么在xml中声明RelativeLayout和在onCreate方法中声明哪个更快呢?

【问题讨论】:

  • 实例化视图比从 XML 文件膨胀视图快一点。除非你的 Java 代码太糟糕了。
  • 与运行时创建布局相比,使用 XML 的最大优势是“您无需每次都运行它即可查看预览”。我相信这本身就是一个强有力的理由。

标签: android performance


【解决方案1】:

布局定义用户界面的视觉结构,例如 Activity 或应用小部件的 UI。您可以通过两种方式声明布局:

  • 在 XML 中声明 UI 元素。 Android 提供了一个简单的 XML 对应于视图类和子类的词汇表,例如 与小部件和布局一样。

  • 在运行时实例化布局元素。您的应用程序可以创建 View 和 ViewGroup 对象(并操作它们的属性) 以编程方式。

Android 框架让您可以灵活地使用其中一种或两种方法来声明和管理应用程序的 UI。例如,您可以在 XML 中声明应用程序的默认布局,包括将出现在其中的屏幕元素及其属性。然后,您可以在应用程序中添加代码,在运行时修改屏幕对象的状态,包括那些在 XML 中声明的对象。

用于 Eclipse 的 ADT 插件提供 XML 的布局预览 — 打开 XML 文件后,选择“布局”选项卡。

您还应该尝试使用 Hierarchy Viewer 工具来调试布局 - 它会显示布局属性值、使用填充/边距指示器绘制线框,以及在模拟器或设备上进行调试时完整呈现的视图。

layoutopt 工具可让您快速分析布局和层次结构是否存在效率低下或其他问题。

在 XML 中声明 UI 的优势在于,它使您能够更好地将应用程序的表示与代码分开 控制它的行为。您的 UI 描述在您的外部 应用程序代码,这意味着您可以修改或调整它而无需 必须修改源代码并重新编译。例如,您可以 为不同的屏幕方向、不同的设备创建 XML 布局 屏幕尺寸和不同的语言。此外,宣布 XML 中的布局可以更轻松地可视化 UI 的结构, 所以更容易调试问题。

当你编译你的应用程序时,每个 XML 布局文件都被编译成一个 View 资源。您应该在 Activity.onCreate() 回调实现中从应用程序代码加载布局资源。通过调用setContentView() 来实现,将布局资源的引用传递给它,格式如下:

我认为这太过分了,只需访问此链接http://developer.android.com/guide/topics/ui/declaring-layout.html 并获取更多信息..

【讨论】:

  • 我可以用我的话来写答案,但我认为您可以从 Android 开发者文档中得到更好的理解。这就是为什么.. :-)
  • 感谢您的回答,我已经阅读了android文档,但是性能如何?视图资源的加载速度是否比代码加载的快?
  • @KamenStoykov,只要您正确声明您的 XML 布局,就没有明显的区别。
  • 没有什么性能上最差的......两者都是一样的......实际上XML布局是一种JAVA类表示......
  • 实际上,当您在代码中声明rl = new RelativeLayout() 时,它也会编译和执行。但是你是用java格式写的。同样,当您在 XML 中编写 <RelativeLayout .. /> 时,它也会编译为 java 类代码并执行。在 XML 中你有一些代表性的格式..
【解决方案2】:

这在性能方面并没有太大区别,因为您的资源 xml 文件也将使用 aapt 工具进行预编译。因此 XML 转换将发生在源资源文件中,并且与 java 源文件一起,它们将被编译为 Java 类文件。因此,性能应该大致相同也是合乎逻辑的,因为最终两者都将被编译并且两者的内存都将在运行时分配。我还检查了我的示例应用程序,通过 XML 和 Java 创建了类似的视图,并且在分析它们时我发现视图的呈现大约需要相同的时间。 :-)

【讨论】:

    【解决方案3】:

    决定在何处声明 UI 组件的一个主要因素是它在应用生命周期中的行为。如果它是静态的,我会在 XML 中声明所有需要的属性,如果它根据用户交互发生变化,我必须在活动中实现它。

    我会尽可能多地使用 XML,以获得上述好处,例如连贯性、更好地管理各种屏幕尺寸、本地化、资源管理等,

    【讨论】:

      猜你喜欢
      • 2016-06-04
      • 2019-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多