ThreeTenth
2016-12-25 13:49
采纳率: 50%
浏览 2.1k

关于安卓原生闹钟源码

安卓闹钟源码看了一个星期了,虽然知道它写了点什么?但是还是没弄清它到底怎么工作的。有没有大神指点一下,是不是有什么没注意到的关键东西,我看的是安卓4.1的闹钟源码

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • stone_you 2016-12-29 02:28
    已采纳

    闹钟在app层面来说只是向framework层设置了一个alarm,通过AlarmManage去设置的。代码如下:

     AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
     am.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
     am.set(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
    

    Alarm的机制在android L开始有改变,alarm分为准时唤醒和非准时唤醒,其中setExact就是L开始新加的api,用于设置准时唤醒的alarm,set是设置非
    准时唤醒的alarm。在L之前只有set一个接口,设置的是准时唤醒。google这么做的原因应该是出于省电的考量。
    这两个API的接口参数类似,主要有三个,一个是alarm type, 唤醒时间,以及一个pendingintent,这个pendingintent就是闹钟到点后alarmmanage
    发送出来的。如果你想研究闹钟的话,推荐你看L以后的源码吧,不要看4.1的了,时钟源码的结构有所调整。

    以上是app层面的alarm,如果你看兴趣的话,还可以好好研究下framework层对alarm的设计,看下alarmmanageservice的源码,你就会更详细的知道
    alarm的底层机制,alarm一共有多少类型等等。另外设置的alarm在app进程被杀死,或是系统重启后,系统都会把设置的alarm清理掉。在clock的源码中你会看到每次重启后,clcok app都会重新设置alarm的,具体代码在AlarmInitReceiver中,它会监听boot complete广播。

    评论
    解决 无用
    打赏 举报
查看更多回答(2条)

相关推荐 更多相似问题