1 性能优化概述
优化目的 |
性能指标 |
优化方向 |
更快 |
流畅性 |
* 1.启动速度 * 2.页面显示速度 * 3.响应速度 |
更稳定 |
稳定性 |
* 1.避免出现应用崩溃(Crash) * 2.避免出现应用无响应(ANR) |
更省 |
资源节省性 |
* 1.内存大小 * 2.安装包大小 * 3.耗电量 * 4.网络流量 |
2 性能指标:流畅性
优化方向 |
优化原因 |
优化方案 |
启动速度 |
初次打开应用时,需加载很多资源 or 功能逻辑 |
采用异步加载(多线程)、分步加载、延期加载的策略 |
页面的显示速度 |
a.页面需绘制的内容(布局&控件)太多,从而导致页面测量的时间过长 b.绘制效率过低,导致绘制时间过长 |
* 布局优化 1.选择耗费性能少的布局 2.减少布局的层级(嵌套):使用merge标签、合理选择布局类型 3.提高布局的复用性:使用include标签 4.减少测量&绘制时间:使用布局标签ViewStub标签、减少布局属性wrap_content 绘制优化 1.降低view.OnDraw()的复杂度 2.避免过度绘制(Overdraw) |
响应速度 |
应用程序出现ANR情况,从而导致应用程序响应速度慢 |
使用多线程,将大量&耗时操作放在工作线程中进行 |
其余优化方案 |
1.合理的刷新机制 2.正确使用动画 a.根据不同的场景选择合适的动画框架 b.使用硬件加速的方式提高流畅度 c.使用动画后需要停止动画 |
|
3 性能指标:稳定性
优化方向 |
优化原因 |
优化方案 |
ANR |
应用程序出现ANR情况,从而导致应用程序响应速度慢 |
使用多线程,将大量&耗时操作放在工作线程中进行 |
Crash |
应用崩溃Crash很多情况是因为内存溢出OOM |
1.避免内存泄漏 2.避免内存抖动:避免频繁创建大量、临时的、小的局部对象 3.图片Bitmap相关:释放资源、适配屏幕、解码方式、图片缓存 4.提高代码质量 & 减少代码数量 5.日常不正确的使用:ListView的缓存复用、尽量减少缓存复用、尽量少用多进程、依赖注入框架等 |
4 性能指标:资源节省性
优化方向 |
优化原因 |
优化方案 |
内存优化 |
避免因不正确使用内存 & 缺乏管理,从而出现内存泄漏、内存溢出、内存空间占用过大等问题,最终导致应用程序崩溃(Crash) |
1.避免内存泄漏 2.避免内存抖动:避免频繁创建大量、临时的、小的局部对象 3.图片Bitmap相关:释放资源、适配屏幕、解码方式、图片缓存 4.提高代码质量 & 减少代码数量 5.日常不正确的使用:ListView的缓存复用、尽量减少缓存复用、尽量少用多进程、依赖注入框架等 |
减少安装包大小 |
应用程序的安装包大小虽对应赢程序的使用无影响,但影响的是:空间占有率:即 应用程序战友手机内存的大小 下载门槛:应用的安装包越大,用户下载的门槛越高 |
1.资源优化 2.减少引入的不必要的功能库 3.代码混淆 4.插件化 |
减少网路流量 |
每次获取资源时都通过流量 &网络加载的方式,将消耗大量网络流量 |
1.主要通过缓存减少网络流量 2.采用三级缓存方案 |
减少耗电量 |
|
1.正确使用 WakeLock机制 2.尽量使用JobScheduler 3.*使用电量分析工具:BatteryHistorian |
5 其他
【Android性能优化(一)--总结】数据结构的选择
参考
https://www.jianshu.com/p/516effe7649d
推荐阅读