Android高效进阶:从数据到AI【1.8】

第 3 章 Android 下的效能进阶

App 产品很重要的一点就是效能,若其在效能上更加自动化、智能化,那么这也将会成为这个产品很重要的竞争力。本章将从自动化 App 性能监测、 App 真机检测以及 APK 信息一站式修改等方面来说明 Android 下的效能进阶。

3.1 App 性能监测实现

App 性能监测犹如 App 的一个技术体检,核心功能涵盖启动速度、内存监测、页面卡顿等,一个好的 App,其性能必然也是比较优秀的。

3.1.1 App 性能监测背景

App UI 流畅程度如何量化和监控的问题,一直以来都是 App 性能监测的痛点。业内比较流行的流畅度监测产品要属 BlockCanary 开源项目,其原理是利用 Looper 队列在处理主线程消息之前和之后提供的日志打印接口,通过截取日志的方式进行分析。该方案的优点是可以很好地定位对流畅度影响粒度大的卡顿点,并输出调用堆栈信息;缺点是该方案粒度不够细,不能

很好地反映帧绘制丢帧的情况。该方案一般只能监测到非常卡顿的情况,而对于因帧丢失引起的流畅度变差不能进行很好的量化。

3.1.2 App 性能监测总体设计

App 性能监测核心功能包括基础性能、布局性能、页面启动速度、卡顿监测和内存泄漏监测等,其总体设计如图 3-1 所示。

3.1.3 启动速度框架

启动速度作为 App 性能监测最核心的部分,也是接触用户的门面,下面就以 Activity 启动速度监测和 Fragment 启动速度监测为例来进行说明。

1. Activity 启动速度监测

原 理 : 在 Application 中 通 过 registerActivityLifecycleCallbacks 方 法 注 册 ActivityLifecycleCallbacks 对 Activity 生命周期进行监控,当 Activity onActivityCreated 时记录,然后在onActivityResumed 时减去之前记录的时间,这样就可以计算 Activity 的启动速度。

2. Fragment 启动速度监测

原理:通过 Google 新推出的 Lifecycle 架构对 Fragment 的生命周期进行监控。

3.1.4 内存监测系统

内存监测系统的原理:在 Activity 和 Fragment onDestroy 的时候,将对象用 WeakReference引用起来,监听对象是否发生内存泄漏,通过 WeakReference 和 ReferenceQueue<Object>配合使用,如果弱引用引用的对象被 GC(垃圾回收),则 Java 虚拟机就会把这个弱引用加入与之关联的引用队列,然后主动执行 GC,触发 WeakReference 被 GC,同时检测 GC 前后ReferenceQueue 是否包含被监听对象,如果不包含,则说明该对象没有被 GC,一定存在到GC Roots 的强引用链,也就是发生了内存泄漏。

主要流程如图 3-2 所示。

3.1.5 页面卡顿解决方案

页面卡

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BinaryStarXin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值