Android开发中的性能优化---布局

1.基础

  Android中所有的View都是“画”在手机屏幕上的,系统是每隔16ms更新一次Activity中的内容,所以为了让用户看不到卡顿,就要想尽一切方法来让界面在16ms内更改完成,遵循的原则其实只有一个-----尽量的少画东西,这样效率当然就会提高,至于什么减少布局层次,避免重复绘制,总结下来还是尽量少画东西。 
   
  为什么是16ms?因为现在市面上的手机一般都是60hz的,所以 16ms/ 帧 ≈ 1s / 60hz

2.方法

  使用手机中的开发人员工具--->调试GPU过度绘制,使用这个工具来检测布局层次再好不过 
 
  颜色当然是越浅越好,能显示出View的自己的颜色,那么是最理想的状况 
   
  

2.1 window的background

  window的background属性,是在每个主题中默认就有的,但是在实际开发中,基本上每个界面的背景色都是特别设置的,并且都会覆盖整个屏幕,所以还不如直接取消掉它 
  另外,这也是解决app冷启动缓慢的一种不错方式,最早的办法是将窗体背景设置为了透明,也就是当用户点击app时,由于窗体背景是透明的,就会将启动的缓慢给归咎于Android系统,这让Android系统无缘无故背了很多黑锅,现在解决冷启动的最好方法就是设置一张图片,就像正常的启动页一样,这样就给用户了一种视觉上秒开的错觉。 
   
  Ps: 
    虽然Android是比较慢,但你拿个一两千的手机和人家iOS五六千的比?搞笑 
   
  

2.2 选择最佳的布局方式

  Android虽然有5大常用布局(Google后续又添加了GridLayoutFlexboxLayoutPercentRelativeLayout等),但最为常用的莫过于LinearLayoutRelativeLayout 
  每一个ViewGrounp基本都会在onMeasure方法中测量出子View的大小,一般情况下LinearLayout的测量效率会高于RelativeLayout,因为LinearLayout的测量次数少,而由于RelativeLayout布局的相对性,所以它的测量次数比较多,毕竟有一种可能是viewA 在横向上依赖于viewB,而viewB在纵向上依赖于viewA 
  
   
  所以,在一般情况下,最好使用LinearLayout 
  既然有一般情况,那么就有二般的情况@[email protected]!,就是LinearLayout布局中使用weight权重来进行布局,这样会增加LinearLayout的测量次数,让它和RelativeLayout处于同一起跑线上,但是众所周知的是,很多时候都需要用到weight属性来进行万恶的屏幕适配,那么问题来了,到底怎么选择? 
  我个人衡量标准: 
  1.当包括父View在内有3层嵌套的情况下,就会考虑RelativeLayout,当不包括父View就嵌套了3层的情况下,我肯定会优先选择RelativeLayout。 
  2.对于不是简单到极致的ListViewRecyclerView,我基本上会选择RelativeLayout来一层解决。 
  

2.3 去掉完全不可能使用的属性资源

  开发时候通常在布局时,就会给View设置一些数据来进行布局参考,比如说为text设置一些文字、给srcbackground设置一些资源或图片(特别是图片),但当程序运行后,这些东西99%不会用到,但是Android系统仍然会傻乎乎的加载这些东西,所以,就不要布局中为这些属性赋值 
  
   
  但是有个问题, 
    如果不赋值,很多人写布局没有了数据参考会很不习惯,比如设置文字的大小,如果赋值就会影响效率,总不能运行时再一个个删除,这样万一运行后效果不理想就还要再一个个加上去, 
    所以google为此提供了tools,在该命名空间下的属性,只会在布局页面中显示,而不会在程序运行时加载 
  
   
  还有一种情况是去掉完全被遮挡的属性,比如下面这张图片中的ImageView的图片遮挡住了LinearLayout的部分背景色,这种情况就不要给布局设置整体背景色了,单独设置给ListView或者它的item即可(不要以为看不到Android就不会画,Android如果有这么聪明,还要程序员干嘛?) 
  
  

2.4 Margin和Padding

  这部分属于个人猜想,paddingmargin在有时候的效果是一模一样的,但是哪个效率更高?我觉得是padding,因为‘margin‘的属性全名是layout_margin,是由父View来决定,这样是不是会影响父View测量子View的速度?

原文地址:https://www.cnblogs.com/sweep/p/8419117.html

时间: 2024-10-12 15:31:18

Android开发中的性能优化---布局的相关文章

Android开发中的性能优化---代码

前 这篇主要总结一些优化代码的技巧,一些写代码中的小细节,可能就会影响程序的执行效率,比如一个地方只会影响1ms,那么1000个地方就会影响1s,1s到底长不长?要知道Activity出现ANR异常的时间为5s!!!  主要遵循两个原则  1.不要创建一些没必要创建的对象以及重复定义某个变量  对象的创建是一个非常繁琐的步骤,JVM首先会对通过new指令对符号进行解析,以此来判断该类是否被加载,然后在堆中进行内存分配,为对象分配完内存空间后,就会对内存区域进行初始化(该为0的为0,该为null的

使用ThinkPHP开发中MySQL性能优化的最佳21条经验

使用ThinkPHP开发中MySQL性能优化的最佳21条经验讲解,目前,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过 多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询大多数的MySQ

Android开发中的SQLite优化

关于SQLite的优化,首先是能用SQL语句批次处理的,就不要单笔操作,Cursor就更是能不用就不用.比如成批的DELETE/UPDATE,将条件组装到SQL语句,会比使用CURSOR一条条的查再删效率要高很多(若干年前就曾使用存储过程代替单笔操作,将一次批量计算时间从一天缩到了数分钟以内,参考).其次是对操作的优化:对于INSERT/UPDATE操作较多时使用事务,如果SELECT操作较多时,使用索引. 结合现在的工作,发现针对操作的优化,下面这篇文章可以翻译出来归档.以下为正文: SQLi

由浅入深讲解android开发中listview的性能优化

ListView是一种可以显示一系列项目并能进行滚动显示的View.在每行里,既可以是简单的文本,也可以是复杂的结构.一般情况下,你都需要保证ListView运行得很好(即:渲染更快,滚动流畅).在接下来的内容里,我将就ListView的使用,向大家提供几种解决不同性能问题的解决方案. 如果你想使用ListView,你就不得不使用ListAdapter来显示内容.SDK中,已经有了几种简单实现的Adapter: ·         ArrayAdapter<T> (显示数组对象,使用toStr

那些Android中的性能优化

性能优化是一个大的范畴,如果有人问你在Android中如何做性能优化的,也许都不知道从哪开始说起. 首先要明白的是,为什么我们的App需要优化,最显而易见的时刻:用户say,什么狗屎,刷这么久都没反应,取关卸载算了. 这跟什么有关,我们先苍白的反驳下,尼玛用户设备老旧网又烂,关我屁事,根本不用优化.可是,老板拍板了,施压给CTO,然后CTO又来找你:Y的今天必须给我想办法优化了,不然不准回家. 好吧,为什么从UI的表象上看,App又卡又慢而且还错乱.我们试着来剖析下吧. 题外话:把minSDK改

android app 开发过程中 对于性能优化的总结

一款手机应用  从开发过程中就要做好 性能优化,这样才能 让用户体验度 提升, 假如 我们打开一个应用 出现卡顿, 不流畅,则会很影响 用户对该应用的态度,产品狗 都很注意这些人机交互方面的 体验. 谷歌官方也是一直在优化 android 系统,不论是  碎片化处理 还是 系能 上面,这方面 ios 就做的比较好,配置比 android 低,但是流畅度却比android高,体验效果更好. 官方推荐方案:http://www.oschina.net/news/60157/android-perfo

Android开发中常用的ListView列表的优化方式ViewHolder

在Android开发中难免会遇到大量的数据加载到ListView中进行显示, 然后其中最重要的数据传递桥梁Adapter适配器是常用的,随着市场的需 求变化ListView'条目中的内容是越来越多这就需要程序员来自定义适配器, 而关键的就是适配器的优化问题,适配器没有优化好往往就会造成OOM (内存溢出)或者是滑动卡顿之类的问题,接下来我就给大家介绍一种常 用的Adapter优化方法 1 /** 2 * list View的适配器 3 */ 4 class Adapter extends Bas

android开发中图片优化步骤

android开发中图片优化方法 1.图片加载方法,方便用户加载图片 /*** * 加载本地图片 * @param context:主运行函数实例 * @param bitAdress:图片地址,一般指向R下的drawable目录 * @return */ public final Bitmap CreatImage(Context context, int bitAdress) { Bitmap bitmaptemp = null; bitmaptemp = BitmapFactory.dec

Android开发中的小技巧

转自:http://blog.csdn.net/guxiao1201/article/details/40655661 简介: startActivities (Intent[] intents) setError (CharSequence error) 动画reverse () addLinks (TextView text, int mask) SystemClock public static void sleep (long ms) registerActivityLifecycleC