有一个常见的错误看法:只使用基础的布局结构会生产高效的布局。然而,每个您程序中的每个控件和布局都需要初始化、布局位置、和绘制。例如使用嵌套的LinearLayout
可以导致很多的层次结构。更严重的是,如果在嵌套的LinearLayout
中使用layout_weight参数将会导致更加严重的性能问题,因为里面的控件在计算大小的时候会计算两次。如果在ListView
或者 GridView
中使用则会更加严重。
这节课程将会介绍如何使用 Heirachy Viewer
和Layoutopt
工具来检查和优化布局。
检查布局
在 Android SDK
中包含了一个href="http://developer.android.com/guide/developing/tools
/hierarchy-viewer.html">Heirachy Viewer
工具,使用该工具可以在您的程序运行的时候分析程序的布局。使用该工具来发现布局中的瓶颈所在。
Hierarchy Viewer 让你选择其连接的设备或者模拟器中的一个运行中的程序,然后显示该界面的布局树形结构。在每个控件方块中的交通灯分别代表 计算尺寸(Measure)、布局子控件(Layout)、和绘制的性能,通过颜色来帮助您分析潜在的问题。
例如,下图显示了一个用于 ListView
的布局。该布局在左边显示一个小图标,在图标右边显示两行文本内容。当该布局会被多次使用(inflated)到的时候性能问题就比较明显, 比如这个例子 由于这个布局是在ListView中使用的, 所以每个ListView中的一项都会解析下该布局然后绘制出来。
hierarchyviewer 工具位于 <sdk>/tools/ 目录。打开后 Hierarchy Viewer 将显示一个可用设备的列表和正在运行的界面。点击 Load View Hierarchy
来查看选中的界面的布局分析结果。例如,下图显示了上面定义的ListView中每一项的布局结果。
查看渲染一个View的时间
上面左侧的图中,您可以看到有三层布局结构。在每个方块上面点击可以查看显示该控件所需要的时间。对于需要时间比较长的地方就是我们应该去重点优化的地方。
显示一个列表条目所需要的时间如下:
-
Measure: 0.977ms
-
Layout: 0.167ms
-
Draw: 2.717ms
改进布局
上面的布局被一个嵌套的 LinearLayout
占用了过多的解析时间,如果把布局的嵌套层次降低可能会提高性能.使用 RelativeLayout
可以实现这个功能。使用RelativeLayout
后可以看到现在布局由3层变为了2层,分析图如下
使用RelativeLayout后的层次结构
Figure 4.
Layout hierarchy for the layout in figure 1,
using RelativeLayout
.
现在显示一个列表条目所需要的时间如下:
-
Measure: 0.598ms
-
Layout: 0.110ms
-
Draw: 2.146ms
看起来是一个很微弱的提升,但是这个时间可以叠加多次,应为每个列表条目在显示的时候都有解析该布局。
当在LinearLayout
中使用 layout_weight 就又不一样了,这样会增加计算控件大小的时间。在使用layout_weight的时候您应该多考虑考虑。
使用 Layoutopt
在您的最终布局文件中运行下 layoutopt
工具来看看还有没有可以优化的空间是个很好的习惯。 Layoutopt 工具也位于SDK的 tools/ 目录下,您可以用该工具优化单个文件也可以优化一个目录中的所有文件。
当您在单个文件中运行 layoutopt 后,该工具会打印出出现问题的行号和问题的描述,有些问题也会给出优化方案。例如
$ layoutopt samples/
samples/compound.xml
7:23 The root-level <FrameLayout/> can be replaced with <merge/>
11:21 This LinearLayout layout or its FrameLayout parent is useless
samples/simple.xml
7:7 The root-level <FrameLayout/> can be replaced with <merge/>
当你修改了布局文件以后,可以再次运行一下 Hierarchy Viewer 来看看具体提升了多少性能。
其它说明:http://www.apkbus.com/android-20040-1-1.html
相关推荐
在"fastfbk_android开发"的背景下,快速反馈和高效开发流程至关重要,这要求开发者不仅要有扎实的编程基础,还要对用户体验有深刻的理解,才能创造出既美观又实用的Android应用。通过学习和实践"auid2-master"项目中...
在Android开发中,内存管理是优化应用程序性能的关键因素。Android-memroy.zip文件中的内容,很显然,聚焦于Android系统下的内存优化策略。...通过学习和应用这些技巧,开发者可以创建更高效、更稳定的Android应用。
综上所述,"Android用户界面详解.doc"可能涵盖了这些关键点,帮助开发者深入理解Android UI的设计原则、组件用法以及优化技巧,从而构建出高质量的Android应用界面。对于初学者来说,这是一个很好的学习资源,而对于...
本篇文章将深入探讨Android布局的相关知识点,包括布局的基本概念、类型、设计原则以及如何通过源码理解和优化布局性能。 ### 1. 基本概念 布局是XML文件,通常位于`res/layout`目录下,用于定义UI组件(如按钮、...
然后,`merge`标签主要用于减少视图层级,它是优化布局层次结构的一个重要工具。通常,每个`<LinearLayout>`、`<RelativeLayout>`或`<ConstraintLayout>`都会增加一层布局,这会使得渲染时间变长。当一个布局文件只...
10. **性能优化**:包括内存管理、耗电优化、UI流畅度提升等,帮助开发者创建高效的Android应用。 11. **测试**:讲解单元测试、集成测试和UI测试,包括JUnit、Espresso和Mockito等工具的使用。 12. **发布应用**...
根据提供的信息,《Android移动应用开发从入门到精通》这本书由张魏和李卉共同编写,主要面向希望学习或深入理解Android应用开发的技术人员、学生以及对移动应用开发感兴趣的读者。以下是从该书标题、描述及部分提及...
**应用程序设计的36技**涵盖了Android应用开发过程中常见的技术点,从简单的界面元素操作到复杂的布局设计,每一项技术都是针对特定场景的最佳实践。 - **基础手艺12技**: - **#1:建立Menu选单**:介绍如何在...
它可能还涵盖了如何使用Qt Creator作为集成开发环境(IDE)来调试和测试Android应用,包括使用模拟器或连接真实设备进行调试。此外,文档可能还涉及了主题和样式设置,以及如何实现动画效果以提升用户体验。 总之,...
以下将详细介绍Android应用开发涉及的关键知识点: 1. **Android体系结构**:Android系统由Linux内核、硬件抽象层(HAL)、库、运行时环境、应用程序框架和应用程序等部分组成。理解这些层次如何协同工作是开发的...
《Android开发应用实战详解》是一本深度探讨Android应用程序开发的专著,旨在为开发者提供全面且深入的指导。这本书详细阐述了Android平台的基础知识、核心组件以及实际开发中的技巧和最佳实践,帮助读者从入门到...
- Android系统架构:了解Linux内核、应用程序框架、库和Android运行时以及用户界面的层次结构。 - Activity生命周期:掌握onCreate、onStart、onResume、onPause、onStop、onDestroy等方法的执行顺序及应用场景。 ...
为了更好地理解和优化布局,可以使用Android Studio提供的工具来辅助分析。例如,使用`Hierarchy Viewer`工具可以帮助开发者查看布局的层次结构,并识别潜在的优化空间。 **步骤**: 1. **启动模拟器**:首先确保...
以上是Android开发的一些关键技巧,不断学习和实践这些知识点,将有助于开发者提高专业技能,打造出更高效、更稳定的Android应用程序。同时,注意遵循Google的开发最佳实践,关注Android的最新更新和技术趋势。
### Android应用开发实战知识点概述 #### 一、Android平台简介 Android是由Google公司主导开发的移动操作系统,基于Linux内核,适用于智能手机、平板电脑等多种移动设备。自2008年发布以来,Android已经成为全球最...
本文将深入探讨如何通过优化布局层次结构、复用布局以及动态加载视图等方式,有效提升Android应用的运行效率。 #### 一、优化布局层次结构 **避免布局嵌套**:布局嵌套过多会显著增加布局渲染时间,尤其是多个`...
Material Design推荐使用Roboto字体,并给出了文本层次结构的指导原则。 9. **自定义视图**: 高级UI设计可能涉及到自定义视图的创建,以实现独特的功能或视觉效果。样例可能包含这样的自定义视图实现,供开发者学习...
开发者需要根据应用需求选择合适的布局,确保界面的层次结构清晰。 2. 视图与视图组:Android UI主要由视图(View)和视图组(ViewGroup)构成,视图是屏幕上的基本元素,如按钮、文本框等;视图组则是容器,用于...
每个Android应用程序都遵循一定的结构,主要包括: - **src/main/java**:存放应用程序的Java源代码。 - **src/main/res**:存放应用程序的资源文件,如布局文件、图片、字符串资源等。 - **AndroidManifest.xml**...