_TenYears_ 2016-12-25 13:49 采纳率: 50%
浏览 2082
已采纳

关于安卓原生闹钟源码

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

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算