1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
| 性能优化:包括了启动,内存,布局,卡顿,网络,电量,瘦身,稳定性; 性能监测平台:外网:听云,内网:自检各种性能检测机制,统一上报;
1.获取启动耗时: 1.手动埋点,aop统一处理,systrace/traceview获取 2.优化手段:延迟加载或者异步加载(充分利用CPU,将任务放到子线程中执行分担主线程任务,jetpack的App Startup框架,或者自定义使 用线程池异步加载)
1. 内存抖动: 主要是由于快速的内存创建和释放造成的,容易产生GC(Profiler); 2. 内存泄漏:主要是由于长生命周期的引用了短生命周期的对象造成的(leakcary); 3. 检测方式:AS的Profiler(Memory Profiler/Memory Analyzer)主动检测,leakcary被动的自动检测;
1. 绘制时长检测: 1.AOP(面向切面编程,在指定的地方执行特定的代码)的方式获取每个界面的绘制耗时; 1.Systrace查看整体绘制情况,查看是否存在绘制耗时等情况; 2.as自带的布局检测工具Inspector,查看视图层次结构; 2.如存在io加载布局文件慢 1.使用AsyncLayoutInflater/X2C异步加载布局 3. 布局层级:减少布局层级,减少过度绘制 1.减少View树层级 2.宽而浅,避免窄而深 3.尽量使用 ConstraintLayout布局控件 2.gpu过度绘制 1.一个像素最好只被绘制一次 2.调试GPU过度绘制 3.蓝色可接受 3. 卡顿的原因就是CPU数据处理不过来,比如层级过深,CPU太忙,GC,之类的,可以通过systrace 工具进行检测, 然后通过编舞者监测帧率定位时间,再然后可以通过looper的日志功能定位到卡顿点。网上也有库blockcanary 3.在Systrace 报告中,你可以查看应用程序布局绘制的相关事件,包括布局计算、绘制命令的发送、GPU 图形呈现等阶段所花费的时间
1.硬件性能导致卡顿:CPU Profiler/Systrace 分析查看CPU利用率 2.使用blockcanary可以实现自动化监测卡顿 3.anr检测:ANR-WatchDog,logcat/trace.txt日志分析信息
1.网络缓存: 1.服务端返回加上过期时间,避免每次重新获取 2.OkHttp、Retfort、Volley都有较好实践 3.无网络时展示数据缓存; 2.网络质量: 1.时长、业务成功率、失败率的统计,在OkHttp、Retfort、Volley等自行统计相关数据并在特定场景合并上报; 2.弱网络模拟 3.增量更新: 1.加上版本的概念,只传输有变化的数据 4.数据压缩: 1.Post请求Body使用GZip压缩(字符压缩) 2.图片上传之前必须压缩 5.图片相关: 1.图片使用策略细化:优先缩略图 2.使用WebP格式图片
1.电量优化检测方案: Battery Historian - Google推出的一款Android系统电量分析工具 - 支持50(API21)及以上系统的电量分析 - 功能强大,推荐使用 - 可视化展示指标:耗电比例、执行时间、次数 - 适合线下使用 2.电量优化套路总结: 1.网络相关:控制请求时机及次数,数据压缩,减少时间 2.传感器相关: 1.根据场景谨慎选择定位模式 2.考虑网络定位代替GPS 3.使用后务必及时关闭,减少更新频率 1.代码混淆,统一三方库、删除无用代码 2.资源在线化 3.So:只保留Armeabi、或者只保留armeabi-v7a、arm64-v8a 4. 图片优化: 1.根据场景使用不同的文件,比如将png换成webp,像什么需要来回改变的简单的图可以使用svg替换,去除不需要的图片资源 2.图片压缩 5. 备用资源:默认情况下Android会有很多备用资源,比如string,包含了多国语言,我们可以指定需要的语言即可;
1.统一编码规范、增强编码功底、技术评审 2.架构优化:统一容错,功能模块解耦 3.回归测试,压力测试,兼容性测试, 4.容灾方案:热更新(bugly),功能开关,崩溃后自启等
|