随着项目版本的迭代,App 的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关。 最近项目核心功能收尾,准备开启优化之路,打造一个高用户体验的 APP

技术不断更新,我将在边学习边实践的过程中进行分享,并将实践结果与大家分享,希望大家看到文章中有不足的地方及时给我留言,我将与大家积极讨论。

注意:如果出现图片不显示问题请移步 图片不显示问题


性能优化

App 初体验-启动优化 more 💦

App 内存知识介绍 more 💦

App 内存检测优化 more 💦

App UI 优化 more 💦

App 直观感受-卡顿优化 more 🌈

App 电量优化

App 存储优化💦

App 网络优化🌞

App 刷脂


极客时间 Android开发高手课

慕课 Top团队大牛带你玩转Android性能分析与优化


微信 Matrix 源码解读

首先了解 Matrix 的配置源码 腾讯 Apm 框架 Matrix 源码阅读 - gradle插件 其中使用到了 gradleTransformTask 相关文章 Gradle自定义插件实现自定义TaskAndroid中Gradle插件和TransformMatrixgradleafterEvaluate 时期 hook 系统 生成 dexTask 为自定义的 Task,并在执行完相关流程后,再执行回原有 Task ,将控制权交还给系统。Matrix 使用 Transform 配合 ASM 完成侵入编译流程进行字节码插入操作。

然后了解 Matrix 代码架构 腾讯 Apm 框架 Matrix 源码阅读 - 架构解析Matrix是整个框架的入口也是所有插件的管理者,所有的插件都需要继承PluginPlugin本身已经具备了问题上报和感知 APP 前后台状态的能力。

不论是 gradle 的使用还是架构设计都有很多地方值得去学习。

Matrix-Android-TraceCanary

先看看它的 TracePlugin 架构 ,其中重点是 UIThreadMonitorUIThreadMonitor

  • UIThreadMonitor配合 LooperMonitor 获得每个刷新帧的各个阶段的耗时时间。其中涉及到 Choreographer(主要是配合 Vsync ,给上层 App 的渲染提供一个稳定的 Message 处理的时机,即 Vsync 到来的时候 ,系统通过对 Vsync 信号周期的调整,来控制每一帧绘制操作的时机),相关文章 Choreographer工作流程分析
  • AppMethodBeat 记录了 Application 的启动时间和结束,hook ActivityThreadmHHandler.Callback 对象为自定义的HackCallback对象来记录最近一个 Activity 被打开的时间,每个方法的耗时时间。

TracePlugin 包含 FrameTracerStartupTracerAnrTracer

  • FrameTracer: 通过UIThreadMonitor提供的感知每帧耗时的能力。进行简单的整合再通知给各个IDoFrameListenerMatrx 中提供了两个 IDoFrameListener 一个就是 FPSCollector 用于上报 FPS,另一个是FrameDecorator用于直接显示 FPS 。当然也可以自己先 IDoFrameListener 自己实现分析逻辑。
  • StartupTracer:onActivityFocused 被回调时,进行各个时间点的计算,监控并上报 App 冷/暖启动时间,Activity启动时间,配合 AppMethodBeat 中记录的方法执行时间,筛选出导致启动时间长的方法并上报
  • AnrTracer: 很好理解的一个 Tracer ,通过 UIThreadMonitor 感知 Looper loop 工作的开始,刷新帧,结束的时间,并在结束时分析是否超过阈值,如果超过就从 AppMethodBeat 中获取相关数据进行分析并上报。将上报Task 延迟发送,如果 dispatchEnd 在规定时间内没有回调,就发送上报 TaskAndroid 源码中的 ANR 也是这么玩的 理解Android ANR的触发原理

原文作者 河里的枇杷树