网站大量收购独家精品文档,联系QQ:2885784924

Android 4.0 Alarm机制浅析.pdf

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android 4.0 Alarm机制浅析

Android 4.0 Alarm 机制浅析 Author: VIC.LUO@CELLON.COM 最近在做关于Alarm 的一些东西,所以就把Android 平台上的alarm 的源代码给稍微看了 看。我个人其实基本不写文档的,而且即使写,也不过区区数字,这个应该是我工作4 年 来的第二篇文档(第一篇是写的和我一直以来工作相关的Messaging)所以内容上和排版 上大家就不要见怪。 Android 系统中alarm 机制最大的体现着就是闹钟这个app 了。通过这个应用我们可以设 置自己的各种定时闹钟,当然系统中的各种定时相关功能的实现也基本全部依赖Alarm 机 制。 闹钟的代码在 packages\apps\ DeskClock\src\com\android\deskclock 目录下,可以自行查看, 这里主要说的是Alarm 机制。 Alarm 机制实现的代码主要在 ./frameworks/base/core/java/android/app/AlarmManager.java ./frameworks/base/services/java/com/android/server/AlarmManagerService.java ./frameworks/base/services/jni/com_android_server_AlarmManagerService.cpp 再往下就是驱动和kernel 的代码,个人对驱动和kernel 的代码不了解,就不说了。 AlarmManager 是framework 中提供给用户来使用的API ,其实现在AlarmManagerService , 为一个server,通过binder 机制来提供服务,开机便注册到system_server 进程中 (所有 server 实现基本都如此)代码如下(systemserver.java ) alarm = new AlarmManagerService(context); ServiceManager.addService(Context.ALARM_SERVICE, alarm); 下面就来介绍一下AlarmManagerService ,本来想用ams 代替,不过一般情况下ams 指的 是ActivityManagerService,所以也就罢了。 AlarmManagerService 的初始化: 1. mDescriptor = init(); 打开设备驱动,其jni 实现为 (com_android_server_AlarmManagerService.cpp ) static jint android_server_AlarmManagerService_init(JNIEnv* env, jobject obj) { return open(/dev/alarm, O_RDWR); } 2. 设置时区 String tz = SystemProperties.get(TIMEZONE_PROPERTY); if (tz != null) { setTimeZone(tz); } 3. mTimeTickSender 这个pendingintent 的作用应该是系统中经常用到的,它是用来 给发送一个时间改变的broadcast,Intent.ACTION_TIME_TICK,每整数分钟的开始 发送一次,就是每分钟的开始就发送,应用可以注册对应的receiver 来干各种事, 譬如更新时间显示等等,具体怎么触发的稍后再说。 mDateChangeSender 这个pendingintent 的作用是啥?代码中时这样写的 Intent.ACTION_DATE_CHANGED,其实和mTimeTickSender 差不多,只是它是每天 的开始发送一次,应该就是00:00:00 发送吧 这2 个pendingintent 和ClockReceiver 有莫大的关系,ClockReceiver 的构造函数如 下

文档评论(0)

xxj1658888 + 关注
实名认证
内容提供者

教师资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2024年04月12日上传了教师资格证

1亿VIP精品文档

相关文档