Android布局优化之层级优化
程序的每个组件和 Layout 都需要经过初始化、布局和绘制,如果布局嵌套层次过深,就会导致加载操作更为耗时,更严重的话还可能导致内存溢出。本节我们学习使用两个工具来检查和优化 Layout。
HierarchyViewer
该工具位于Android SDK tools中,使用HierarchyViewer可以分析正在运行app的布局,从而打破影响布局性能的瓶颈。
HierachyViewer通过选择运行在模拟器或真机上的进程来工作,并通过布局树来展示。上面每个标识代表布局的Measure、Layout和Draw的性能,帮助开发者来定位潜在的问题。
如图1所示,图中是ListView中的一条布局,这个布局左边是一个ImageView,右边是一个LinearLayout中嵌套两个TextView布局。
图1
HierarchyView工具可以用于Android模拟器,打开后,即可看到可用设备列表和运行的组件。在Windows选项卡里,点击Hierarchy View后,即可看到选择组件的布局层次结构。例如图2 展示了图1 的ListItem布局的层次结构。
图2
减少层次结构
由于上图使用了嵌套的LinearLayout结构布局,导致性能变慢。我们可以使用扁平化的思想来优化它们——布局要宽而广,而不是窄而深! 我们可以使用Relativelayout来作为顶级节点,这样转向RelativeLayout来布局之后,我们会看到下图这样的布局层级结构。
图3
修改为RelativeLayout布局之后,层级减少,布局性能大大增强。另外,LinearLayout中的layout_weight也会减慢measure的速度,所以不是必要时不要使用layout_weight属性。这只是一个小小的例子,在一些非常复杂的布局中,如果层级太多或LinearLayout嵌套过多,系统会将很大性能消耗在UI的measure计算上面,因此,层级结构优化至关重要。
Lint
Android Lint是在 ADT 16 提供的新工具,它是一个代码扫描工具,Lint已经替代了Layoutopt tool成为重要的提示工具,它具有更多更高级的功能 ,能够帮助我们识别代码结构存在的问题。Lint 包含的一些检测规则有:
使用 compound drawable 替代一个包含 ImageView 和 TextView 的 LinearLayout。
合并根 FrameLayout
没用的子节点或父节点
硬编码问题
另外,开发者可以通过 File>Settings>Project Settings 来管理配置文件。
Android布局优化之层级优化的更多相关文章
- android:布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!
1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...
- Android布局优化之include、merge、ViewStub的使用
本文针对include.merge.ViewStub三个标签如何在布局复用.有效减少布局层级以及如何可以按需加载三个方面进行介绍的. 复用布局可以帮助我们创建一些可以重复使用的复杂布局.这种方式也意味 ...
- Android为TV端助力 布局、绘制、内存泄露、响应速度、listview和bitmap、线程优化以及一些优化的建议!
1.布局优化 首先删除布局中无用的控件和层级,其次有选择地使用性能较低的viewgroup,比如布局中既可以使用RelativeLayout和LinearLayout,那我们就采用LinearLayo ...
- Android高级开发-布局渲染流程与优化
CPU(中央处理器)与GPU(图像处理器) 主要是设计目标不同,针对不同的应用场景.多缓存多分支,适用于复杂的逻辑运算,主要负责Measure,Layout,Record,Execute的计算操作. ...
- [旧][Android] 布局优化
备注 原发表于2016.05.21,资料已过时,仅作备份,谨慎参考 前言 最近在编写布局时,发现这一块是有很多值得深入学习的地方的.毕竟应用开发,界面展示是十分重要的部分.另外在开发时,为自己的代码做 ...
- 【转】Android布局优化之ViewStub
ViewStub是Android布局优化中一个很不错的标签/控件,直接继承自View.虽然Android开发人员基本上都听说过,但是真正用的可能不多. ViewStub可以理解成一个非常轻量级的Vie ...
- 谈谈android 布局 的优化
来自:http://www.cnblogs.com/youxilua/archive/2012/05/08/2489414.html 导言 设配android的屏幕一定是一个噩梦,就好比那些搞网页设计 ...
- 转:Android布局优化
categories: Android 在Android开发中,我们常用的布局方式主要有LinearLayout.RelativeLayout.FrameLayout等,通过这些布局我们可以实现各种各 ...
- Android布局优化:include 、merge、ViewStub的详细总结
版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 本篇博客主要是对上篇博客的补充Android性能优化之UI渲染性能优化, 没有什么新东西,觉得应该是都掌握的玩意,写出来也只是自己做个小小的总结. ...
随机推荐
- sql的一点总结<一>
sql总结 1.常见的数据库对象有哪些?表(table) 视图(view) 序列(sequence) 索引(index) 同义词(synonym)存储过程(procedure) 存储函数(functi ...
- 你需要了解的 Core Spotlight
你需要了解的 Core Spotlight -- 了解Spotlight Core Spotlight是iOS 9中苹果推出了新的Search API,可以直接搜App内的内容(in-App Sear ...
- Omi教程-组件通讯
组件通讯 Omi框架组建间的通讯非常遍历灵活,因为有许多可选方案进行通讯: 通过在组件上声明 data-* 传递给子节点 通过在组件上声明 data 传递给子节点 父容器设置 childrenData ...
- gvim生存配置
set guioptions-=Tcolorscheme desert set clipboard+=unnamedset mouse=a winpos 200 50set lines=20 colu ...
- nodejs爬虫——汽车之家所有车型数据
应用介绍 项目Github地址:https://github.com/iNuanfeng/node-spider/ nodejs爬虫,爬取汽车之家(http://www.autohome.com.cn ...
- BZOJ USACO 银组 水题集锦
最近刷银组刷得好欢快,好像都是水题,在这里吧他们都记录一下吧(都是水题大家一定是道道都虐的把= =)几道比较神奇的题到时再列出来单独讲一下吧= =(其实我会说是BZOJ蹦了无聊再来写的么 = =) [ ...
- Java编程风格学习(三)
在上一篇的java编程风格学习(二)中我们学习了一些在Java编码过程中的格式规范,遵循这些规范毋庸置疑是我们的书写高质量代码的前提与基础.今天我们更进一步,一起来学习Java编程的命名规范,向着编写 ...
- lua string.sub截取中英文
cocos2dx 2.x环境,要做一个截取很长的字符串的前100个字符显示的小功能. PC环境ok,出了ios包发现有时候这个字符串会显示不出,猜测了下可能是跟中文字在lua里每个字占3个字符有关,举 ...
- nodejs中的路由
一.路由初步 url.parse(string).query | url.parse(string).pathname | | | | | ------ -------------------http ...
- Jenkins+Git 持续集成
持续集成是必要的! 希望达到的效果是:开发同事签入代码后,对应的站点可以自动实现更新.目前还只在在内部服务器上实现开发环境中的站点更新,不涉及到线上的发布. 目前使用Jenkins实现这样的持续集成. ...