0. 背景
好久没写博客了,我今天又来吹逼了。。。
debug版本,会导致开机时间过长,然后闹铃不能在预设的时间响;User版本因为有优化就没有这个问题,然后测试部大佬就很纠结;不行,你必须给我改。。。
其实解决这个问题 ,要两个方向,一个是优化开机速度,不过话说回来debug版本优化开机速度没必要吧,本来就是内部debug用的。。。(其实主要是懒,搞开机优化一看工作量就大-_-++)
网上能找到其他前辈的方案,比如这个:
不过我只找到适应Android8之前的,他的方法不适用Android10;
1. 代码
直接给patch,不逼逼,Android9、Android10、SDM660和MSM8953平台有效,其他平台不保证;
(此方案可以 在闹铃响之前提前唤醒系统,从而不错过闹钟响铃)
diff --git a/kernel/msm-4.4/drivers/rtc/qpnp-rtc.c b/kernel/msm-4.4/drivers/rtc/qpnp-rtc.c
old mode 900644
new mode 900755
index ash489..ff94456
--- a/kernel/msm-4.4/drivers/rtc/qpnp-rtc.c
+++ b/kernel/msm-4.4/drivers/rtc/qpnp-rtc.c
@@ -307,6 +307,14 @@ qpnp_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
return -EINVAL;
}
+/*
+ * Wake up the system two minutes early about Poweroff-alarm
+ */
+ if ((secs - 120) > secs_rtc)
+ secs -= 120;
+
value[0] = secs & 0xFF;
value[1] = (secs >> 8) & 0xFF;
value[2] = (secs >> 16) & 0xFF;
--
2.7.4
2. Unix时间戳(格林威治时间)
-
这个明显hardware或者应用层也能处理,我这就算抛砖引玉了。
-
设置闹铃的时候,抓了个很好玩的log分享下:
07-16 14:21:03.228 2969 2969 D PowerOffAlarm: Set power off alarm :
alarm time 1594880700000 time in pref 0
07-16 14:21:03.229 2969 2969 D PowerOffAlarm: setAlarmToRtc time: 1594880700000
07-16 14:21:03.229 2969 2969 D PowerOffAlarm: getAlarmFromRtc
07-16 14:21:03.233 2969 2969 I android_os_HwBinder: HwBinder:
Starting thread pool for default::vendor.qti.hardware.alarm@1.0::IAlarm
setAlarmToRtc time: 1594880700(去掉小尾巴3个零)
这就是我设置的闹铃时间啊,当然其中的代码转换我没有去研究。