7大生鲜电商类应用Alarm占用情况评测

2022-03-31 13:15:04 浏览数 (1)

介绍Alarm

开发者们应该都知道,Alarm可以完成闹钟式定时任务,系统主要通过AlarmManager类对其进行管理,我们可以通过AlarmManager在一些Alarm设定的时间点启动服务进行事件处理,同时还可以用Alarm来初始化一些长时间运行的操作。

Alarm对功耗的影响

Alarm设计不当会导致电量过度消耗,正常情况下应用放置在后台CPU会处于休眠状态,功耗值趋于稳定且数值较小。Alarm会调起CPU处理事件使其处于工作的状态,造成功耗值上升并且会持续一段时间。如图所示为后台应用Alarm唤醒的功耗趋势。频繁的Alarm会导致电池电量过度消耗。

DevEco检测方案

华为DevEco云测平台通过检测应用在灭屏1小时内,后台对唤醒设备Alarm的占用来衡量应用是否存在不合理使用Alarm的情况。

DevEco具体Alarm占用测试方法如下:

1.将应用安装,启动正常操作几分钟后,放置后台,灭屏,执行以下指令

2.模拟拔除电缆:adb shell dumpsys battery unplug

3.清理上次的测试数据:adb shell dumpsys batterystats --reset

4.允许记录所有Wake信息:adb shell dumpsys batterystats--enable full-wake-history

5.一小时后,执行adb bugreport >bugreport.txt导出bugreport报告

通过分析bugreport(参考Battery Historian的搭建),Wakeup Alarm info里面的Alarm累计唤醒次数进行判断。

测试应用

本次测试选取了7款生鲜电商类App及版本:

应用名称

版本

盒马

4.24.1

每日优鲜

9.6.2

京东到家

7.1.1

苏宁小店

4.0.11

多点

4.4.5

永辉生活

5.10.0.51

本来生活

5.0.1

测试结果

测试结果显示盒马的Alarm次数大于联盟的标准值20次/小时且Alarm唤醒次数高达56次/小时,超出标准值2倍多。京东到家、苏宁小店、本来生活和永辉生活Alarm唤醒次数均为0次,多点与每日优鲜均小于10次/小时都表现良好。

图中显示了盒马放置在后台一个小时的Alarm的具体信息。CONNECT_EVENT和app_keep_alive事件的Alarm唤醒次数较多,希望应用合理设置Alarm,减少不必要的耗电行为。

建议

1.减少定时唤醒闹钟已经休眠的设备的频率。

2.设备在休眠状态,减少拉取数据、主动PUSH等触发Alarm的操作。

3.使用setInexactRepeating()来替换setRepeating(),Android会同步触发多个应用重复的Alarm。可以减少系统唤醒设备的总次数,从而减少了电池的耗电量。

4.在Repeating Alarm触发的网络请求里添加随机性(抖动)操作,尽可能降低Alarm触发频率,除非必要,否则不使用唤醒设备的Alarm(Wakeup_Alarm)与高精度的RTC时钟。

end

0 人点赞