AlarmReceiver extends BroadcastReceiver 
没具体研究过,可以下载alarmclock源码看看。

解决方案 »

  1.   

    这东西还是得看alarmclock源码!要不然你对系统得非常得解!
      

  2.   

    系统的闹钟程序准确的说应该是一个系统服务进程了。
    LZ可以看看Framework里面的AlarmManagerService.java的源码 ,它注册了一个ClockReceiver,
     @Override
            public void onReceive(Context context, Intent intent) {
                if (intent.getAction().equals(Intent.ACTION_TIME_TICK)) {
                 scheduleTimeTickEvent();
                } else if (intent.getAction().equals(Intent.ACTION_DATE_CHANGED)) {
                   
                    TimeZone zone = TimeZone.getTimeZone(SystemProperties.get(TIMEZONE_PROPERTY));
                    int gmtOffset = (zone.getRawOffset() + zone.getDSTSavings()) / 60000;                setKernelTimezone(mDescriptor, -(gmtOffset));
                 scheduleDateChangedEvent();
                }
            }
    最终提供给应用层是AlarmManager
      

  3.   

    多谢各位传道授业解惑!
    正在学习android呢,一直对service的实际应用比较迷糊~~,现在有个实际应用方面的认识了。
      

  4.   

    闹钟的确是通过服务实现的, 这个服务的名字叫 AlarmManagerService.AlarmManagerService 又是通过硬件RTC实现的. 简单地说就是, RTC 硬件对应着 /dev 目录下的一个设备名(比如 alarm), AlarmManagerService 会用 ioctl 函数读 /dev/alarm, 然后就阻塞了, 一旦某个定时器到时了, ioctl 就会从 /dev/alarm 读出一个值并从刚才阻塞的地方继续运行: 找到是谁注册了这个定时器并发出Intent.