位置: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