阿里干货课堂丨Android 高效的 Layout
我们知道随着我们业务越来越负责,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相关推荐
- 阿里干货课堂丨Android 之 Listview
LisView显示的三要素 1: ListView,用来展示列表 2:Adapter,用来存在数据&将数据与视图进行绑定 3:数据,将被映射的字符串.图片url等等. 关于Adapter , ...
- 干货课堂丨分享一种LCD驱动电路方案【飞凌嵌入式】
在一次项目定制中,客户要求我们将 CPU 主控和 LCD 显示屏电压驱动电路做成一体板, LCD 显示屏所需要的 AVDD,VGH,VGL 等电压需要主控板提供,因为这几路电压所输出的电流都很小(一般 ...
- imx6板载linux登录时间,大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源.doc...
大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源.doc (5页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 ...
- android分享文件分享结果_干货分享丨DM删除归档日志文件的多种方法
上一期我们讲解了DM数据库归档日志的切换,本期我们讲解DM数据库归档日志文件的删除. 本章内容已在如下环境上测试: ①操作系统:中标麒麟7: ②数据库版本:达梦8: 相关关键字:DM数据库.归档日志文 ...
- imx6 linux 开发环境,大干货!迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源...
描述 迅为IMX6开发板丨Android丨Ubuntu丨Linux丨三大系统全开源 板载模块:WIFI蓝牙.4G.GPS.SATA.CAN/RS485.重力加速度计,电子罗盘等 资料丰富:原理图.底板 ...
- 阿里 框架 原声Android,阿里P8大佬亲自教你!你所不知道的Android原生开发的现状,含泪整理面经...
基本情况 先说一下个人基本情况,计算机科学与技术专业.主要学的Android开发,所以投的岗位都是Android开发工程师.投了知乎,内推了阿里蘑菇街腾讯百度网易.腾讯百度都没有收到面试,知乎Skyp ...
- Android高效异步图片加载框架
概述 Android高效异步图片加载框架:一个高效的异步加载显示的图片加载框架,同时具备图片压缩,缓存机制等特性. 详细 代码下载:http://www.demodashi.com/demo/1214 ...
- Android高效加载大图、多图解决方案,有效避免程序内存溢出现象
好久没有写博客了,今天就先写一个小的关于在Android中加载大图如何避免内存溢出的问题. 后面会写如何使用缓存技术的核心类,android.support.v4.util.LruCache来加载图片 ...
- 阿里云课堂:云安全的架构设计与实践之旅
10月25日下午,阿里云课堂第二期<云安全的架构设计与实践>在上海光大会展中心国际大酒店举行.此次公开课试图让更多的开发者深入了解到云安全架构那些事儿.当然云安全的架构设计背后有大量的技术 ...
最新文章
- c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题
- (转)解决Android SDK Manager无法更新或下载太慢问题
- java基础之构造方法
- boost::synchronized_value相关的测试程序
- Android之解决AppBarLayout 下面一道阴影
- leetcode 654. 构造最大二叉树 思考分析
- 转:VMware安装Mac OS X Mavericks系统图文教程
- 用Visual Studio 2008编写Win32汇编程序
- arcgis engine 获取高亮Feature、element
- 【招聘内推】百度地图招聘推荐推送算法工程师
- SVProgressHUD的使用
- 程序员必知3大查找(转)
- MATLAB手写数字识别
- android 微信输入法表情,分析Android 搜狗输入法在微信和QQ中发送图片和表情
- 手把手教你学会用C语言编写井字棋小游戏
- MQTT网关是什么?
- IE浏览器在地址栏针对param直接输入中文导致乱码的解决方案
- Acwing-860. 染色法判定二分图
- 如何分辨iphone 的冷屏与暖屏
- 微信获取用户地理位置
热门文章
- 彩虹云商城QQ快捷登录设置教程,附QQ互联分发api平台地址
- 如果你不懂,你要做的不是害怕,而是去学习
- ISO质量管理体系认证有什么优势
- matlab[ra ca pa],CA码产生(matlab)
- 【Android学习专题】java基本语法和概念(学习记录)
- Android 文件下载--普通单线程下载文件
- 带你探索条形码世界的奥秘
- NZT提示200;201;202处理方式
- springboot集成mqtt相关配置+案例
- efm8系列单片机c语言编程,【经验】对EFM8系列8位单片机可编程逻辑单元CLU的作用及应用的理解...