近几天将android中需要性能优化的方面总结了一下,大致如下
性能优化,何为性能优化,
一般在性能测试中,用响应时间,TPS(吞吐量)来表示。
- 通常情况就是,响应时间过长,TPS太低,
- 对于后台开发,还有高并发下内存泄露。
- 对于移动开发,有电量优化,内存优化两类
优化方式,(秘密:其实就是优化响应时间,提高TPS而已)
三大类:
- 降低执行时间(利用多线程并发或者分布式提高TPS,缓存(对象缓存,IO,网络)。
- 数据结构和算法优化(ArrayList,SpareList)。
- 更优的接口调用(JNI),逻辑优化,需求优化)
同步改异步(利用多线程提高TPS),提前或者延迟TPS,
网络优化:连接服务器优化:不用域名,省去DNS解析,动态IP列表,服务器合理部署(),
- 获取数据优化策略:连接复用(节省连接时间,如keep-alive),请求合并(多个请求合成一个),减少请求数据大小(对于POST,做压缩,对请求头压缩,Http1.1不支持,2.0可以,不支持可以通过服务器对一个请求头缓存,同样请求用MD5代替)。
- CDN缓存静态资源:缓存常见的图片,js,css等静态资源,减少返回数据的大小(压缩,精简数据格式(json),不同设备返回不同分辨率的图片,增量更新,大文件下载(断点续传)),数据缓存(缓存数据在一定的时间内可以再次请求缓存数据)
- 其他优化方式:预取,分优先级,延迟部分请求,多链接, 代码优化
缓存(内存,文件,数据库,网络),常用的数据,放到内存中缓存,
常用的缓存:线程池,图片缓存,sd缓存,数据预取缓存,消息缓存,listview缓存,网络缓存,io缓存,Layout缓存,
数据储存优化:数据类型(StringBuilder代替String,使用softReference利益回收,final的读取最快),数据结构的选择(Arraylist,HashMap,SparseArray)
算法优化,JNI优化,逻辑优化,需求优化,,
多线程,异步提高TPS,
布局优化:
Include Merge,ViewStub,去除不必要的嵌套,使用RelativeLayout性能更好,减少不必要的infalte,全局。用SurfaceView或者TextureView代替View(绘制操作移动到了另一个单独的线程,SurfaceView不能被像常规试图一样,移动缩放,TextureView可以,android4.0引入的)
布局调优工具,hierarchy viewer,
数据库优化(省略,以后再写)