Android 性能优化总结

来源:互联网 发布:迅雷mac下载速度 编辑:程序博客网 时间:2024/05/21 13:03

1 前言

经常谈到Android性能优化,包括面试也经常问道,包括google官方也为此开设了专门的培训课程。因此这里做一个简单的总结吧。
Android性能优化主要从以下几个方面入手

UI优化,内存优化,网络优化,电池优化,高性能编码优化

2 UI优化

UI方面的优化主要是避免UI绘制方面的掉帧现象,我们知道Android每隔16ms便会重新渲染一帧图像。UI方面优化主要从以下几点来入手。

  • 布局优化
    布局层级不能太深,适当使用 include,merge(减少View树的层次来优化Android的布局) ,ViewStub等标签

  • 过渡渲染优化
    这个主要由于渲染Render,每隔16ms便会重绘,解决过渡绘制的问题,可打开开发者模式 开启 过渡绘制选项。另外在BaseActivity中可添加 :

getWindow().setBackgroundDrawable(null);//设备背景为空,防止过渡渲染
  • 部分UI控件使用优化
    比如ListView复用convertView优化

  • 自定义View优化
    第一,在onDraw()中不要去做耗时的操作,例如读取IO,以及大循环等
    第二,自定义View尽可能的复写onDetachedFromWindow()方法,在里面去做一些清零以及回收的相关工作,比如停止动画,停止Handler,Looper循环等

3 内存优化

内存优化的方面比较多,这里可能讲的补全,后续也会逐步更新。

  • 节制使用service
    Service作为四大组件之一,使用并不是越多越好,首先Service会占用大量的内存及耗费CPU资源,同时会增加电池电量的消耗。因此一个APP的常驻后台的Service应该尽可能的少。

  • 界面不可见时释放内存
    一般我们在Activity不可见时,可考虑释放一些内存,可以在Activity中重写onTrimMemory()方法,监听TRIM_MEMORY_UI_HIDDEN这个级别 一旦触发了之后就说明用户已经离开了我们的程序。这时可以做一些释放内存的操作。

  • 避免在Bitmap上浪费内存
    包括图片的按需加载,采样加载(缩放),图片格式的选取,以及适当的使用弱引用,软引用,还有就是采用成熟的图片加载框架picasso fresco glide

  • 使用优化过的数据集合
    比如使用SparseArray,SparseBooleanArray 替代HashMap工具类

  • 内存溢出,内存泄漏的优化
    这个经常问道的,主要就是代码方面的避免以及一些开源工具的使用比如leakcanary等的使用

  • 对象复用
    这个主要是在代码中应该避免新建过多的对象,特别是for循环中,一定要注意这一点。

  • 知晓内存的开支情况
    这个就是使用Android studio中的Monitor查看内存使用情况,及时的做好内存优化。

4 网络优化

  • 缓存的设计
    包括客户端,服务端缓存的设计,对于客户端来说,应该尽量减少不必要的网络请求

  • 传输优化
    需要服务端配合的:json数据格式,WebP代替jpg,支持断点续传,服务器缓存设计

  • 控制最大请求并发量
    多个请求合并成一个,及时取消已失效的请求,过滤重复请求,timeout时间设置,请求优先级设置等。

5 电池优化

  • 节制的使用service

  • 节制后台线程

  • 优化内存

  • 对屏幕唤醒,亮度等这些系统APP的优化

6 高性能编码优化

主要有以下几点:

  • 良好的编码规范

  • 合理的数据结构及算法 SparseArray

  • 常量的使用

  • 线程池的使用

  • 合理的选用开源框架

  • 适当的使用设计模式 builder,观察者,单例,代理,工厂

以上是关于Android性能优化方面的建议,后续有时间会分开仔细的讲一讲。特别是内存,网络方面的

0 0
原创粉丝点击