ADROID 2.1 架构解析——闹钟分析透彻,有点基础都能看懂!1 设置定时时间文件:packages/apps/alarmclock/src//android/alarmclock/Alarms.javaprivate static void enableAlert(Context context, final Alarm alarm, final long atTimeInMillis) { AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); ... am.set(AlarmManager.RTC_WAKEUP, atTimeInMillis, sender); ... }由闹钟管理器设置定时时间。2 闹钟管理器2.1 定时设置文件:frameworks/base/core/java/android/app/AlarmManager.javapublic 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; AlarmManager(IAlarmManager service) { mService = service; } public void set(int type, long triggerAtTime, PendingIntent operation) { try { mService.set(type, triggerAtTime, operation); } catch (RemoteException ex) { } }将 type, triggerAtTime, operation 等参数转向闹钟管理器服务。3 闹钟管理器服务文件:frameworks/base/services/java//android/server/AlarmManagerService.java3.1 定时设置public AlarmManagerService(Context context) { mDescriptor = init(); ...}public void set(int type, long triggerAtTime, PendingIntent operation) { setRepeating(type, triggerAtTime, 0, operation); } public void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) { if (operation == null) { Log.w(TAG, "set/setRepeating ignored because there is no intent"); return; } synchronized (mLock) { Alarm alarm = new Alarm(); alarm.type = type; alarm.when = triggerAtTime; alarm.repeatInterval = interval; alarm.operation = operation; // Remove this alarm if already scheduled. removeLocked(operation); if (localLOGV) Log.v(TAG, "set: " + alarm); int index = addAlarmLocked(alarm); if (index == 0) { setLocked(alarm); } } }private void setLocked(Alar...