http://developer.android.com/training/improving-layouts/index.html

1. 优化布局层次

1)  每增加一个View或者布局,都会增加额外的 “初始化-布局-重绘” 的时间。 LinearLayout 嵌套会导致层次较多,特别是如果设置了 layout_weight 属性时,效率会很低,因为每个子View都会measure两次。这在View需要重复创建,比如ListView或者Gridview中影响会比较明显。可以用RelativeLayout来减少层次。

浅而宽的层次好过窄而深的层次。最大层次最好不要超过10层。

2) 使用hierarchyviewer 分析和优化布局效率

目录: <sdk>/tools/hierarchyviewer

Load View Hierarchy -> 加载一个界面的布局树

选中一个元素,会显示其 Measure、Layout、Draw 三个过程的时间,三个红绿灯的颜色代表前面三个过程的效率。

3)使用 Lint 来优化布局。

在 ADT 16+ 的版本上已经集成了 Lint 工具,Eclipse工具栏上有相应的图标。它会给出很多优化的建议。

目录: <sdk>/tools/lint.bat

旧版本中使用的是 layoutopt 工具。

2. 使用 <include/>、<merge/>标签

1)使用<include/>复用布局

<include layout="@layout/titlebar"/>

可以重新指定布局的属性:

<include android:id=”@+id/news_title”         
android:layout_width=”match_parent”
android:layout_height=”match_parent”
layout=”@layout/titlebar”/>

但是要让重新指定的布局属性起作用,必须同时指定 layout_width 和 layout_height 属性。

2) include 布局的时候,某些情况下使用<merge/>标签,可以减少一层布局。

3. 使用 ViewStub 来延迟布局加载

某些View或者布局很少用到,可以在需要的时候才加载,以便减少内存使用,提高绘制效率。

ViewStub 是很轻量级的View,没有尺寸,不会绘制,布局inflate的时候也不消耗什么性能。

eg:

<ViewStub
android:id="@+id/stub_import"
android:inflatedId="@+id/panel_import"
android:layout="@layout/progress_overlay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_gravity="bottom" />

在需要使用该View的时候:

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);

// 或者
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();

ViewStub 一旦 visible/inflated 后它就不在有效,被替换成 layout指定的布局,其id也失效。

新布局的id是 inflatedId 指定的。

ViewStub 现在不支持 <merge/> 标签。

 

4. 让ListView滑动顺畅

1)关键是把耗时操作放到工作线程中,不要放在UI线程。
2)使用ViewHolder

Best Practices for Performance_3.Improving Layout Performance 优化布局的更多相关文章

  1. PLSQL_性能优化工具系列17_Best Practices: Proactive Data Collection for Performance Issues

    占位符 https://support.oracle.com/epmos/faces/DocumentDisplay?_afrLoop=2082062510193540&id=1366133. ...

  2. Android 性能优化(4)Optimizing Layout Hierarchies:用Hierarchy Viewer和Layoutopt优化布局

    Optimizing Layout Hierarchies This lesson teaches you to Inspect Your Layout Revise Your Layout Use ...

  3. Android 优化布局层次结构

    前面介绍过使用HierarchyViewer和Android lint来优化我们的程序,这一篇算是总结性的,借助一个小例子来说用怎么优化应用布局.这个例子是android官网给出的,作者也当一把翻译. ...

  4. Android中View绘制优化之一---- 优化布局层次

    本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 前言,竟然是翻译,当然得弄的有板有眼. 照着大作家格式来咯 , - - . 译序 最近一直在做锁屏界面,之前也 ...

  5. [整]Android开发优化-布局优化

    优化布局层次结构 一个普遍的误解就是,使用基本的布局结构会产生高效的布局性能.然而每一个添加到应用的控件和布局,都需要初始化,布局位置和绘制.比如,使用一个嵌套的LinearLayout会导致过深的布 ...

  6. Android 性能优化---布局优化

    Android 性能优化---布局优化 Android 布局绘制原理 布局加载过程 setContentView() --> inflate() -- > getLayout()(I/O操 ...

  7. Android Studio分类整理res/Layout中的布局文件(创建子目录)

    res/layout中的布局文件太杂,没有层次感,受不了的我治好想办法解决这个问题. 前几天看博客说可以使用插件分组,可惜我没找到.知道看到另一篇博客时,才知道这个方法不能用了. 不能用插件,那就手动 ...

  8. Android优化——UI优化(一)优化布局层次

    优化布局层次 1.避免布局镶嵌过深(如下) <LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi ...

  9. android 分区layout以及虚拟内存布局-小结

    摘要 简述启动过程的内存分配,各个映像的烧写,加载,logo的刷新,文件系统mount. DRAM:外部RAM: ISRAM:内部RAM(128K),(PL会跑在ISRAM里面,去初始化DRAM,lo ...

随机推荐

  1. linux编译c文件

    1.创建.c文件,比如在firstmake文件夹创建了一个a.c文件,那么编译语句为: gcc -o firstmake a.c //格式为文件夹名 文件名 2.然后就会生成一个firstmake.o ...

  2. POJ 3067 原来是树状数组--真的涨姿势

    题意:计划在东边的城市和西边的城市中建路,东边的点从1.....n,西边的点从1......m,求这些点连起来后有多少个交叉. PS:这个题目没有任何思路,没想到是树状数组.... 交叉出5个点 分析 ...

  3. JAVA Web day02--- Android小白的第二天学习笔记

    CSS(美工部分知识,了解) 1. CSS概述 1.1.CSS是什么? * CSS 指层叠样式表 样式表:存储样式的地方 层叠:一层一层叠加 高大富有帅气人 1.2.CSS有什么作用? *CSS就是用 ...

  4. kafka性能基准测试

    转载请注明出处:http://www.cnblogs.com/xiaodf/ 1.测试环境 该benchmark用到了六台机器,机器配置如下 l  IntelXeon 2.5 GHz processo ...

  5. 从一个数组中提取出第start位到第end位

    假设通过数组in来表示一个很大的数(in[0]表示最低bit),提取该数的第start位到第end位(计数起始位为0): #define MAX_BYTE_LEN ( 48 ) int getData ...

  6. jquery时间控件datepicker

    配置文件 $("#joinedTime").datepicker({ inline: true, yearRange: "1996:2016", showBut ...

  7. python 使用总结

    本人原来是编写java的,后来转到编写ios之后,最后又来编写python了.相对于其他的一些开发人员来说,我精通的语言还是比较杂的. 这里将几个语言进行类比,比较一些个人的看法的东西. 首先obje ...

  8. U盘安装操作系统

    U盘安装操作系统 On 2010 年 4 月 27 日, in IT, by hr 写在前面 本文主要介绍如何使用U盘安装系统,无法使用光驱安装或者不想随身带着光盘,使用这招都很管用,而且备着这样一只 ...

  9. 第七章 LED将为我们闪烁:控制发光二极管

     第七章 LED将为我们闪烁:控制发光二极管 本章我们将会看到一个完整的linux驱动程序,通过linux驱动程序控制LED的四个小灯,通俗的说就是通过向linux驱动程序来控制LED小灯的开关.用到 ...

  10. 【Cocos2d-x 3.x】内存管理机制与源码分析

    侯捷先生说过这么一句话 :  源码之前,了无秘密. 要了解Cocos2d-x的内存管理机制,就得阅读源码. 接触Cocos2d-x时, Cocos2d-x的最新版本已经到了3.2的时代,在学习Coco ...