- AlarmManager
Kernel层
- Android RTC 自下而上分析--嵌入式学院(华清远见旗下品牌)
/dev/rtc
/dev/alarm
ioctl(fd, ANDROID_ALARM_SET(type), &ts)
ioctl(fd, ANDROID_ALARM_WAIT)
timerfd
没有RTC Alarm时,使用timerfd实现。
Java层 core/app
源代码位于:frameworks/base/core/java/android/app。
实现文件:AlarmManager.java。
services/alarm
类对应关系:
| java | jni | C++ |
| AlarmManagerService | AlarmImpl |
-
jni
源代码位于:frameworks/base/services/jni。
实现文件:com_android_server_AlarmManagerService.cpp。
-
java
源代码位于:frameworks/base/services/java/android/server。
实现文件:AlarmManagerService.java。
AlarmManagerService的辅助类:
Alarm——定时器,可以重复。
Batch——将允许延迟并且有交集的定时器打包一起。
AlarmThread——循环等待RTC Alarm,分派回调(PendingIntent)
AlarmHandler——内部消息循环,当Kernel不支持Alarm时,使用消息定时机制模拟实现。
InFlight——记录正在运行的回调,用于统计WakeLock的实际使用者。
ClockReceiver——注册1分钟和每天超时的定时器,回调Intent发送广播,广播类型:ACTION_TIME_TICK、ACTION_DATE_CHANGED。
ResultReceiver——处理回调完成的通知。
UninstallReceiver——处理应用停止(用户主动停止)、重启、卸载。



