安卓最佳实践之布局优化

布局优化
优化布局使用
     1>建议使用LinearLayout、RelativeLayout、FrameLayout。
     2>在布局层次一样的前题下,优先使用LinearLayout或者FrameLayout(未分出先后),对同样的布局哪种布局层次最少,就用哪种。
     3>使用LinearLayout的layout_weight时,让其使用方向上的长或者宽为0,因为这样解析会比较快(详见onMeasure)
     4>ViewStub: viewstub标签同include标签一样可以用来引入一个外部布局,不同的是,viewstub引入的布局默认不会扩张,即既不会占用显示也不会占用位置,从而在解析layout时节省cpu和内存。
viewstub常用来引入那些默认不会显示,只在特殊情况下显示的布局,如进度布局、网络失败显示的刷新布局、信息出错出现的提示布局等。
通过viewstub的原理我们可以知道将一个view设置为GONE不会被解析,从而提高layout解析速度,而VISIBLE和INVISIBLE这两个可见性属性会被正常解析。
     5>如果有共用的布局,用include加载过来,不过它基本不会对布局层次产生什么优化,可能重用性和代码的优雅性会更好一点。
     6>不需要立即加载的设置为Gone或者ViewStub,因为这样系统不会解析,即不会占用CPU和内存,其实ViewStub的原理也是把它设置为Gone。
     7>一个LinearLayout里面有一个TextView和ImageView,就直接用一个TextView代替即可,这是最谷歌官方里面所建议优化的第一点。
     


减少布局层次
     1> 太深的 Layout —— Layout 的嵌套层数太深对性能有很大影响。尝试使用更扁平的 Layout ,比如 RelativeLayout  或  GridLayout  来提高性能。一般最多不超过10层。
     2>如果一个布局的根结点是FrameLayout并且不用设置padding和背景,那么用merge标签作为根结点会比较好,因为这样在解析时merge会被忽略,而activity的父布局也正好是FrameLayout,这只是一种巧合的典型罢了。 
     3>Merge的第二个用法就是当include一 些布局时,如果include的外层与include内容自身顶层布局是一致的,可以把include的顶层改为merge,例如是有两个上下结构的Button它的顶层你写成了merge,那么在引用它的地方的父布局必须是LinearLayout的垂直布局,这就对引用者提出了新的挑战,因为这种概率也是很小的,所以实战价值有限。
  
工具:
     1>使用Lint可以把代码和布局中的基本错误给搞定(替代layoutopt),Lint是代码规范的检测工具,比如JSLint,CSSLint,JSONLint。
     2>hierarchy viewer不实用,可以直接看布局边界。

其它优化
1> 用SurfaceView或TextureView代替普通View
2> 使用RenderJavascript
3> 使用OpenGL绘图
4> 尽量为所有分辨率创建资源



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值