谷歌在2017年的I/O大会上提出的另一个概念是Vitals,重点是在Android O版本中,将针对设备电池续航、安全、应用启动时间和稳定性的优化上。除了系统的优化外,Google Play控制台提供的新功能Android vitals仪表盘也可以更清楚的帮助开发者理解app的行为表现,进而提升app的性能。有兴趣的读者可以通过Android vitals来了解。
通过分析Android vitals 提供一些参考指标,工程师可以采取正确的措施来优化app,如上通过仪表盘可以看到从设备收集的如下的数据:
Stability: ANR rate & crash rate
Render time: slow rendering (16ms) and frozen UI frames (700ms)
Battery usage: stuck wake locks and excessive wakeups
下面是Android vitals 的一些常见的判断指标:
下面是Android vitals常见的检测指标以及解决方案。
ANR是Application Not Responding的缩写,是UI线程如果被阻塞太长的时间所造成的。触发ANR问题的主要有两个原因:
产生问题的可能的源头有:长耗时计算、IO操作、锁竞争、死锁、慢广播处理。
Android vitals 能收集并利用应用 ANR 事件的匿名数据,提供多个级别的 ANR 具体报告。主界面上概述了您应用中 ARN 活动的概览信息,显示用户至少经历一次 ANR 事件的日对话比重,并且提供前一天以及前 30 天的情况的单独报告。同时也提供了不良行为门槛。
打开详情界面,即 ANR 比率页面,您能够了解不同时间的 ANR 具体比例,以及针对不同应用版本、活动名称、ANR 类别、以及 Android 系统下的 ANR 情况。
未经处理的异常或signal将会导致程序的Crash。
造成Frozen frames的原因有:
但无论如何,冻帧都不应当出现。系统会自动监控冻帧,并在 Android Vitals dashboard显示冻帧数据。
唤醒机制,是AlarmManager API 为了定时唤醒设备而设置闹铃的机制,app通过AlarmManager的set()方法来设置闹铃,同时还需要选择RTC_WAKEUP 或 ELAPSED_REALTIME_WAKEUP作为FLAG。当闹铃触发时,设备从低功耗模式唤醒,而且当onReceive()或onAlarm()运行时,将自动获取一个局部唤醒锁,过多地唤醒,将加快电量的损耗。
为了解决过度唤醒问题,您须要确认应用在什么地方设定了唤醒闹钟,然后降低这些闹钟的触发频率。为了查看应用在哪些地方使用了唤醒闹钟,可以打开 Android Studio 中的 AlarmManager 类,右击 RTC_WAKEUP 或者 ELAPSED_REALTIME_WAKEUP 域,选择 “Find Usages (查找使用)”,然后您就能看到项目中所有使用到此类旗标的事件了。
若您认为使用唤醒闹钟无法避免,那么如果您的闹钟标签满足以下要求,Play Console 可以提供更好的分析数据:
除此之外,WIFI扫描和后台连接移动网络也会加快电量损耗,所以不要在后台启动过多的后台服务。