我们知道随着我们业务越来越负责,UI布局也会越来越复杂,大量的布局信息必定会带来一定的性能损耗,那么我们怎么才能写出高效的布局呢?

1.使用<include> <merge><viewStub>标签。

2.LinearLayout中减少使用layout_weight参数,因为使用此属性会导致子元素被测量两次。

3.学会测量Layout的层次结构,优化布局 。

4.使得Layout宽而浅,而不是窄而深(在Hierarchy Viewer的Tree视图里面体现) 连接真机时,HierarchyVIewer报错了:无法加载设备上的窗口数据

原因:若需要使用hierarchyviewer,需要手机上开启对应的ViewServer服务。Hierarchy Viewer在连接手机时,手机上必须启动一个叫View Server的客户端与其进行socket通信。而在商业手机上,是无法开启View Server的,故Hierarchy Viewer是无法连接到普通的商业手机。

解决办法:

方法一:使用模拟器。

方法二:App中需要开启View Server,可以参考一下连个类的实现。

http://pan.baidu.com/s/1sjIulYl 提取码:wrc8

使用方法:

引入ViewServer.java 类到Util包中,在需要查看Layout层次结构的Activity类中,加入以下代码:

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

ViewServer.get(this).addWindow(this);

}

@Override

public void onDestroy() {

super.onDestroy();

ViewServer.get(this).removeWindow(this);

}

@Override

public void onResume() {

super.onResume();

ViewServer.get(this).setFocusedWindow(this);

}

 

5.使用Lint工具来优化Layout

  • 使用merge根框架 – 如果FramLayout仅仅是一个纯粹的(没有设置背景,间距等)布局根元素,我们可以使用merge标签来当作根标签;

  • 无用的分支 – 如果一个layout并没有任何子组件,那么可以被移除,这样可以提高效率

  • 无用的父控件 – 如果一个layout只有子控件,没有兄弟控件,并且不是一个ScrollView或者根节点,而且没有设置背景,那么我们可以移除这个父控件,直接把子控件提升为父控件

  • 深层次的layout – 尽量减少内嵌的层级,考虑使用更多平级的组件 RelativeLayout or GridLayout来提升布局性能,默认最大的深度是10 Lint工具在android Studio中的使用: Analyze → Inspect code 这个时候会自动启动Lint工具。

6.虽然官方说LinearLayout 与 RelationLayout在性能上相差无几,但是能使用  relative layout的地方尽量不要使用LinearLayout。

7.有同事对比了RelationLayout 与 FrameLayout的性能,发现FrameLayout性能比RelationLayout更优。原因很简单:因为FrameLayout比RelationLayout更简单,没有那么多属性,所有效率更高。无论是使用那种布局,在都能满足需求的情况下,只要记住,使用属性跟少、更简单的布局方式一定是没错的。

8.对于textview和imageview组成的layout,直接使用textview替换(drawableTop类似属性)。

更多文章请关注订yue号:java_xuetang。

阿里干货课堂丨Android 高效的 Layout相关推荐

  1. 阿里干货课堂丨Android 之 Listview

    LisView显示的三要素 1:  ListView,用来展示列表 2:Adapter,用来存在数据&将数据与视图进行绑定 3:数据,将被映射的字符串.图片url等等. 关于Adapter , ...

  2. 干货课堂丨分享一种LCD驱动电路方案【飞凌嵌入式】

    在一次项目定制中,客户要求我们将 CPU 主控和 LCD 显示屏电压驱动电路做成一体板, LCD 显示屏所需要的 AVDD,VGH,VGL 等电压需要主控板提供,因为这几路电压所输出的电流都很小(一般 ...

  3. imx6板载linux登录时间,大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源.doc...

    大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源.doc (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 ...

  4. android分享文件分享结果_干货分享丨DM删除归档日志文件的多种方法

    上一期我们讲解了DM数据库归档日志的切换,本期我们讲解DM数据库归档日志文件的删除. 本章内容已在如下环境上测试: ①操作系统:中标麒麟7: ②数据库版本:达梦8: 相关关键字:DM数据库.归档日志文 ...

  5. imx6 linux 开发环境,大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源...

    描述 迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源 板载模块:WIFI蓝牙.4G.GPS.SATA.CAN/RS485.重力加速度计,电子罗盘等 资料丰富:原理图.底板 ...

  6. 阿里 框架 原声Android,阿里P8大佬亲自教你!你所不知道的Android原生开发的现状,含泪整理面经...

    基本情况 先说一下个人基本情况,计算机科学与技术专业.主要学的Android开发,所以投的岗位都是Android开发工程师.投了知乎,内推了阿里蘑菇街腾讯百度网易.腾讯百度都没有收到面试,知乎Skyp ...

  7. Android高效异步图片加载框架

    概述 Android高效异步图片加载框架:一个高效的异步加载显示的图片加载框架,同时具备图片压缩,缓存机制等特性. 详细 代码下载:http://www.demodashi.com/demo/1214 ...

  8. Android高效加载大图、多图解决方案,有效避免程序内存溢出现象

    好久没有写博客了,今天就先写一个小的关于在Android中加载大图如何避免内存溢出的问题. 后面会写如何使用缓存技术的核心类,android.support.v4.util.LruCache来加载图片 ...

  9. 阿里云课堂:云安全的架构设计与实践之旅

    10月25日下午,阿里云课堂第二期<云安全的架构设计与实践>在上海光大会展中心国际大酒店举行.此次公开课试图让更多的开发者深入了解到云安全架构那些事儿.当然云安全的架构设计背后有大量的技术 ...

最新文章

  1. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题
  2. (转)解决Android SDK Manager无法更新或下载太慢问题
  3. java基础之构造方法
  4. boost::synchronized_value相关的测试程序
  5. Android之解决AppBarLayout 下面一道阴影
  6. leetcode 654. 构造最大二叉树 思考分析
  7. 转:VMware安装Mac OS X Mavericks系统图文教程
  8. 用Visual Studio 2008编写Win32汇编程序
  9. arcgis engine 获取高亮Feature、element
  10. 【招聘内推】百度地图招聘推荐推送算法工程师
  11. SVProgressHUD的使用
  12. 程序员必知3大查找(转)
  13. MATLAB手写数字识别
  14. android 微信输入法表情,分析Android 搜狗输入法在微信和QQ中发送图片和表情
  15. 手把手教你学会用C语言编写井字棋小游戏
  16. MQTT网关是什么?
  17. IE浏览器在地址栏针对param直接输入中文导致乱码的解决方案
  18. Acwing-860. 染色法判定二分图
  19. 如何分辨iphone 的冷屏与暖屏
  20. 微信获取用户地理位置

热门文章

  1. 彩虹云商城QQ快捷登录设置教程,附QQ互联分发api平台地址
  2. 如果你不懂,你要做的不是害怕,而是去学习
  3. ISO质量管理体系认证有什么优势
  4. matlab[ra ca pa],CA码产生(matlab)
  5. 【Android学习专题】java基本语法和概念(学习记录)
  6. Android 文件下载--普通单线程下载文件
  7. 带你探索条形码世界的奥秘
  8. NZT提示200;201;202处理方式
  9. springboot集成mqtt相关配置+案例
  10. efm8系列单片机c语言编程,【经验】对EFM8系列8位单片机可编程逻辑单元CLU的作用及应用的理解...