本文共 2461 字,大约阅读时间需要 8 分钟。
adb shell dumpsys battery unplug
adb shell dumpsys deviceidle force-idle deep
adb shell dumpsys alarm log on
然后我们就可以连接USB,在logcat中动态查看日志行为。
日历界面设置了一个type=2 的闹钟,时间是19:06后,但是 idle 必发无法唤醒(现象复现)
只看到设置,没有看到触发
2018-08-22 19:04:28.710 934-1401/? V/AlarmManager: set(PendingIntent{ 9a425b2: PendingIntentRecord{ 80c7903 com.xxx.calendar broadcastIntent}}) : type=2 triggerAtTime=266359 win=0 tElapsed=270360 maxElapsed=266359 interval=0 flags=0x12018-08-22 19:04:28.712 934-1401/? V/AlarmManager: set(PendingIntent{ 580a080: PendingIntentRecord{ 80c7903 com.xxx.calendar broadcastIntent}}) : type=2 triggerAtTime=266361 win=0 tElapsed=270362 maxElapsed=266361 interval=0 flags=0x1
设置一个 type=0 并1534936865974【2018-08-22 19:21:05.974】时刻 唤醒,日志准时唤醒,误差1ms
// 设置一个 type=0 并1534936865974【2018-08-22 19:21:05.974】时刻 唤醒,日志准时唤醒2018-08-22 19:17:05.975 934-1422/? V/AlarmManager: set(PendingIntent{ 20d5a62: PendingIntentRecord{b0587f3 com.android.xxx.powersave startService}}) : type=0 triggerAtTime=1534936865974(2018-08-22 19:21:05.974唤醒) win=0 tElapsed=1262624 maxElapsed=1262624 interval=0 flags=0x92018-08-22 19:21:05.974 934-1067/? V/AlarmManager: Checking for alarms... rtc=1534936865974, elapsed=1262624// 准时唤醒,误差1ms2018-08-22 19:21:05.975 934-1067/? V/AlarmManager: Triggering alarm #0: Alarm{ 72bd3ba type 0 when 1534936865974 com.android.xxx.powersave}2018-08-22 19:21:05.978 934-1067/? V/AlarmManager: sending alarm Alarm{ 72bd3ba type 0 when 1534936865974 com.android.xxx.powersave}2018-08-22 19:21:05.978 934-1067/? D/AlarmManager: wakeup alarm = Alarm{ 72bd3ba type 0 when 1534936865974 com.android.xxx.powersave}; package = com.android.xxx.powersave, needGrouping = false
正常定时器代码如下
public static void starAlarmTaskByService(Context context, int intervalMinute, Intent intent) { AlarmManager mAlarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); long triggerAtMillis = System.currentTimeMillis() + (intervalMinute * 60 * 1000); PendingIntent operation = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation); } else { mAlarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtMillis, operation); } }
转载地址:http://zzjti.baihongyu.com/