android应用程序优化之布局优化
在我们开发APP时不仅要在代码实现上。做到对App的优化,而在我们的界面布局也有很多要优化的地方,假设布局写的非常low的话,系统载入布局的速度会十分的慢,使得用户的体验非常的不好。这篇文章主要是从我平时对布局的优化方面总结一下,我觉得常常能够用到的布局优化方面的一些技巧和手段。
1.降低布局的嵌套。这一点也是最重要的
搞android的都知道,android的整个UI布局文件最后也是要一层一层的解析成View对象的,假设层次太深的话,对导致递归的层次太深而极大的影响解析速度,所以,我们一定不能让布局文件的层次太深,要想做到布局文件的层次不深,通经常使用到的手段有:1)使用RelativeLayout取代LinearLayout。2)编写完布局文件时。能够使用HieracyView工具检查是否有多余的无用布局,假设有,则一定要去掉没用的布局。
2.布局重用。
一些能够公用的布局我们不必要每次都重写一遍,能够将其写为一个独立的布局文件,最后使用include标签将布局引用就可以。然而,严格上来讲,布局重用仅仅是降低了我们代码的编写量,并不能达到相应用的优化作用。并且,在使用include时会非常easy产生第一点中的无用父布局,例如以下图:
怎样去除使用include代来的负作用,以下会有方案。
3.使用merge标签去消除include标签所引入的无用布局
使用merge时要注意,merge标签仅仅能是根布局,结合2。3两点看一个演示样例使用方法:
首先,创建一个merge标签的根布局,代码例如以下:
? xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"> <Button
android:id="@+id/ok"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:text="OK" /> <Button
android:id="@+id/cancel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
android:layout_marginTop="10dp"
android:text="Cancel" /> </merge>
接着。使用include引入布局:
<include layout="@layout/ok_cancel_layout"/>
4.利用 ViewStub延迟载入一些用不到的布局,在一些场合代替android:visibility="gone"的使用方法。由于被gone掉的布局不断是会同一时候创建对象的。那为什么使用ViewStub就高效呢,拿源代码来说话,先看一下ViewStub源代码:
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(0, 0);
}<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
<p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Monaco; color: rgb(119, 119, 119);"><span style="color: rgb(0, 0, 0);"> </span>@Override</p><p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Monaco;"> <span style="color: #931a68">public</span> <span style="color: #931a68">void</span> draw(Canvas <span style="color: #7e504f">canvas</span>) {</p><p style="margin-top: 0px; margin-bottom: 0px; font-size: 11px; font-family: Monaco;"> }</p>
由onMeasure()方法和draw()方法能够看出。 ViewStub的初始宽高都是零,所以他開始不会占用空间,其次draw()方法也没有运行不论什么的绘制,由这两个方法就能够看出。ViewStub的确非常高效。
在代码中要操纵ViewStub的时候,要首先使用viewstub.inflate()方法,将其所拥有的View初始化进去。否则会报空指针错误。
5.降低不同层间的背景重绘。比如,假设某个view父布局的背景已经设置为了白色。则不须要再为此view设置背景色,通过这个简单的小技巧,能够许多的提升速度。
6.假设整个App都使用了自己定义的Title和background,则我们能够使用自己定义的style,永久的去掉系统默觉得我们的Activity所加入的title和background,也能够提高Activity的渲染速度。
android应用程序优化之布局优化的更多相关文章
- 【转】Android性能优化之布局优化篇
转自:http://blog.csdn.net/feiduclear_up/article/details/46670433 Android性能优化之布局优化篇 分类: andorid 开发2015 ...
- Android UI学习 - FrameLayou和布局优化(viewstub)
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://android.blog.51cto.com/268543/308090 Fram ...
- Android实习生 —— 屏幕适配及布局优化
为什么要进行屏幕适配.对哪些设备进行适配?在近几年的发展当中,安卓设备数量逐渐增长,由于安卓设备的开放性,导致安卓设备的屏幕尺寸大小碎片化极为严重.从[友盟+]2016年手机生态发展报告H1中看截止1 ...
- Android性能优化之布局优化
最新最准确内容建议直接访问原文:Android性能优化之布局优化 本文为Android性能优化的第二篇——布局优化,主要介绍使用抽象布局标签(include, viewstub, merge).去除不 ...
- Android 性能优化 三 布局优化ViewStub标签的使用
小黑与小白的故事,通过虚拟这两个人物进行一问一答的形式来共同学习ViewStub的使用 小白:Hi,小黑,ViewStub是什么?听说能够用来进行布局优化. 小黑:ViewStub 是一个隐藏的,不占 ...
- Android Studido下的应用性能优化总结--布局优化
前言:一个应用的成功=产品设计*性能 ,再此我们不讨论一个应用的设计,那交给我们可爱又可恨的产品经理和UI设计师来决定!所以这里分步骤讨论如何提升一个应用的性能,这里先探讨布局优化问题. 布局优化 避 ...
- Android开发学习之路--性能优化之布局优化
Android性能优化方面也有很多文章了,这里就做一个总结,从原理到方法,工具等做一个简单的了解,从而可以慢慢地改变编码风格,从而提高性能. 一.Android系统是如何处理UI组件的更新操作的 ...
- android 优化之布局优化
布局优化的思路很简单,尽量减少布局文件的层级,看过系统源码的都知道,Android view绘制都是逐层绘制的,所以布局的层级少了,decodeview的时候绘制工作自然就少了. 那么如何进行布局的优 ...
- Android 卡顿优化 4 布局优化实际技巧
今天分享一些layout布局书写中的一些技巧,希望看过之后你也一样可以写出性价比高的布局.我个人的目标是用最少的View写出一样效果的布局.因为我相信View的数量减少伴随着的就是层级的减少.从而达到 ...
随机推荐
- 转-subl配置全栈开发环境
为 Sublime Text 3 设置 Python 的全栈开发环境 Sublime Text 3 (ST3) 是一个轻量级的跨平台文字编辑器,尤以其轻快的速度,易用性和强大的社区支持而著称.它一经面 ...
- [JNA系列]Java调用Delphi编写的Dll之JNA使用
介绍 给大家介绍一个最新的访问本机代码的 Java 框架 —JNA . JNA(Java Native Access) 框架是一个开源的 Java 框架,是 SUN 公司主导开发的,建立在经典的 JN ...
- 在linux下编译运行C++程序
头一回...把windows下的程序挪到linux下,代码见这篇随笔 1.编译ZTHREAD,使用./configure失败,直接编译的,方法还是上面提到的那篇随笔 2.编译源码,最开始用的cc,后来 ...
- Unix系统编程(一)
主要内容:文件输入/输出的系统调用. 在Linux中,万事万物皆文件. 文件描述符的概念 通用I/O模型的系统调用: 打开文件 open 关闭文件 close 向文件写数据 write 从文件读数据 ...
- Zookeeper中的选举机制
Zookeeper虽然在配置文件中并没有指定master和slave,但是,zookeeper工作时,是有一个节点为leader,其他则为follower.leader是通过内部的选举机制临时产生的. ...
- linux查看硬盘空间 文件大小
du,disk usage,是通过搜索文件来计算每个文件的大小然后累加,du能看到的文件只是一些当前存在的,没有被删除的.他计算的大小就是当前他认为存在的所有文件大小的累加和 df,disk free ...
- Angular4中的依赖注入
在Angular中使用依赖注入,可以帮助我们实现松耦合,可以说只有在组件中使用依赖注入才能真正 的实现可重用的组件. 如果我们有个服务product.service.ts,其中export了一个Pro ...
- android camera之nv21旋转
这周做的一个android的camera开发,需要获取到视频帧数据,并且需要是nv21格式的byte数组,并且视频帧的图像需要是正方向的.和android相机打过交道的都清楚,android的came ...
- SVN 提交出错:Attempted to lock an already-locked dir
http://www.2cto.com/kf/201306/221414.html —————————————————————————————————————————————————————— 在ec ...
- CTO俱乐部
主持人:目前互联网金融行业存在哪些行业痛点?云信CreditCloud 是如何解决这些痛点的,过程中有哪些思考? 朱家波:目前这个行业有点乱象丛生, 投资人对行业的不信任是一个很大的痛点.解决不信任的 ...