Android性能优化总述

1、Android性能优化包括:

布局优化、绘制优化、内存优化、响应速度优化、bitmap优化、线程优化等

2、布局优化的思想很简单,就是尽量减少布局文件的层级,减少Android绘制时的工作量
布局优化的方法:

1、删除布局中无用的控件和层级,有选择性地使用性能较低的ViewGroup。例如:布局中既可以使用LinearLayout又可以使用RelativeLayout的时候,采用LinearLayout;但是单纯地通过一个LinearLayout无法实现产品效果,需要通过嵌套的方式来完成的时候,还是采用RelativeLayout。

2、采用<include>标签、<merge>标签和ViewStub。include主要用于布局重用,merge标签一般和include标签配合使用,可以减少布局的层级,ViewStub则是提供了按需加载的功能,当需要的时候才会将ViewStub中的布局加载到内存,这样可以提高程序的初始化效率。

merge主要依赖于include它的父布局,如果父布局是一个垂直方向的LinearLayout,include里的布局也是LinearLayout的话,就可以用merge标签来代替,这样可以减少一层布局层级,但是merge标签必须是根节点。

ViewStub继承了View,它非常轻量级且宽高都是0,因此本身不参与任何布局和绘制的过程,存在的意义在于按需加载。比如网络异常时的界面、进度条等,没有必要在整个界面初始化的时候将其加载进来的,通过ViewStub可以做到在使用的时候再加载,调用的方法是inflate(),提高了程序的初始化性能。

ViewStub使用的注意事项:

  1. ViewStub标签需要必须通过android:layout属性指定待加载的视图资源文件ID,否则会抛异常(在inflate方法被调用前,通过setLayoutResource也可以设置待加载的视图资源文件ID,但不建议这样做)。
  2. ViewStub标签的所有android:layout_打头的属性,都会替换待加载视图的跟布局对应属性
  3. 最好通过ViewStub的inflate方法加载视图,该方法会返回视图根节点。
  4. inflate方法只能调用一次,不建议通过setVisibility加载视图
  5. 如果需要通过findViewById查找待加载视图中的节点,需要在inflate方法执行之后,否则会找不到
3、绘制优化

绘制优化指的是View的onDraw方法要避免执行大量的操作:1、在onDraw中不要创建新的局部对象,2、onDraw方法中不要做耗时任务,也不要执行成千上万次循环。谷歌给出的View的绘制帧率是60帧,也就是每帧绘制时间不要超过16ms(1000/60=16ms)。

4、内存泄漏优化

静态变量导致内存泄漏、单例模式导致的内存泄漏、属性动画也会导致内存泄漏(解决方法是在activity的ondestory方法中调用animator.cancle()方法来停止动画)

5、响应速度优化和ANR日志分析

activity在5s内无响应、broadcaseReceiver在10s内未执行完操作,都会引起ANR。ANR的检查定位可以通过traces.txt文件分析来定位

adb pull /data/anr/traces.txt .      .标识当前目录

6、bitmap优化
7、线程优化

线程优化的思想是采用线程池,避免程序中存在大量的Thread

8、其他优化建议

  • 避免创建过多的对象
  • 不要使用枚举,枚举占用的内存空间要比整型大
  • 常量使用static final来修饰
  • 适当使用软引用和弱引用
  • 采用内存缓存和磁盘缓存
  • 尽量采用静态内部类,避免潜在的由于内部类持续持有外部类的引用而导致内存泄漏


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值