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 其他
数据结构的选择