位置:frameworks/base/apex/jobscheduler/service/java/com/android/server/alarm/AlarmManagerService.java
在 SystemServer 里面被启动:
public AlarmManagerService(Context context) {
this(context, new Injector(context));
}
4种类型:
public static final int RTC_WAKEUP = 0;
public static final int RTC = 1;
public static final int ELAPSED_REALTIME_WAKEUP = 2;
public static final int ELAPSED_REALTIME = 3;
set 方法设置一个未来启动的intent 。
设置一个 PendingIntent 在指定的时间执行。
可以设置循环
循环时间间隔:最小 1分钟,最大一年。
void rescheduleKernelAlarmsLocked:
重新计算下一个需要最先执行的 Alarm 。
jni:
frameworks/base/apex/jobscheduler/service/jni/com_android_server_alarm_AlarmManagerService.cpp
最终使用 timerfd_settime来设置闹钟时间 。
timerfd 看这里:
https://man7.org/linux/man-pages/man2/timerfd_create.2.html
涉及到 rtc的 内容:
https://man7.org/linux/man-pages/man4/rtc.4.html
https://man7.org/linux/man-pages/man8/hwclock.8.html
AlarmManagerService是Android系统服务,负责调度RTC、RTC_WAKEUP、ELAPSED_REALTIME及ELAPSED_REALTIME_WAKEUP四种类型的闹钟。它使用JNI与C++层交互,通过timerfd_settime在内核中设置闹钟。该服务能设置最小1分钟到最大一年的循环周期,并且涉及与硬件时钟rtc的交互。
655

被折叠的 条评论
为什么被折叠?



