Android性能优化总结


卡顿优化

卡顿的原因
1,页面复杂,绘制层级过深,启动时。
2,页面切换时,前后台切换时。
3,主线程处理复杂到数据了,数据处理占用cpu较高,主线程拿不到cpu时间片,内存增加gc频率过高。主线程无法即使处理页面刷新。
Profile GPU Rendering,手机图形监测。
TraceView,分析函数调用过程,可代码插入。startMethodTracing,生成trace文件。

布局优化

查看层级。减少层级,Layout Inspector,使用merge,ViewStub,布局复用

过度绘制

overDraw,clipRect方法。

启动优化

启动监测。
线程初始化,少做事情。异步加载,延迟加载,用到时加载。

刷新机制

减少刷新次数,避免不必要刷新,缩小刷新区域,控制后台线程影响。

动画优化

优先考虑属性动画,重回次数少。


内存优化

对象引用,强若软虚
自动装箱 autoboxing
内存复用,有效利用系统自带资源,如通用字符串,颜色,动画和页面样式,既可以减小内存开销,也能缩小Apk包大小。
ListView,视图复用。
对象池。
Bitmap对象复用,inBitmap字段。告知解码器使用已存在内存区域。不需要再次申请。3.0+。
使用Arraymap减小内存开销
枚举类型运行时,enum值生命力耗内存,使用影响性能,避免。
Lrucache,最近最少使用缓存
图片内存优化,位图格式,四种,空间和视觉效果平衡。
insamplesize,加载内存压缩。
inscaled indensity intargetdensity
图片三级缓存


Crash捕获

Java虚拟机每个进程设置一个UncaughtExceptionHandler,实现该接口,并设置,在出现crash时,回调uncaughtException方法,获取到Throwable未捕获到异常,记录着crash日志信息,数据过大主动压缩,先保存本地,再次启动App时,网络正常时上报。
Linux信号机制,监控系统异常和中断,当App异常时,内核将生成错误信号通知当前进程,在native层,App注册导致crash的信号量处理函数,即可捕获crash信号。


ANR

1,输入事件5s无响应。
2,广播10s内无法处理完成。
3,Service在20s内无法处理完成。
ANR主要原因,主线程阻塞,cpu一直占用,主线程抢不到时间片。
发生了ANR,会产生一个Logcat日志和文件trace,在data/anr/目录下。
Logcat关键信息,ANR发生进程PID,具体类,类型原因Reason,发生前后的cpu使用情况,如果cpu使用量少,说明可能是主线程阻塞。
在AndroidStudio可以分析trace文件,Analyze Stacktrace,查看Thread dump信息,看是哪个线程阻塞。


任重而道远

你可能感兴趣的:(Android性能优化总结)