- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
android AlarmManager 研究
AlarmManager研究android 4.0目录(?)[-]概述AlarmManagerAlarmManager的成员函数AlarmManagerService逻辑闹钟主要行为设置alarm重复性alarm取消alarm设置系统时间和时区运作细节AlarmThread和Alarm的激发AlarmThread中的runwaitForAlarmtriggerAlarmsLocked进一步处理唤醒闹钟说说AlarmManagerService中的mBroadcastRefCountAlarmManager研究侯 亮?1.概述??????? 在Android系统中,闹钟和唤醒功能都是由Alarm Manager Service控制并管理的。我们所熟悉的RTC闹钟以及定时器都和它有莫大的关系。为了便于称呼,我常常也把这个service简称为ALMS。??????? 另外,ALMS还提供了一个AlarmManager辅助类。在实际的代码中,应用程序一般都是通过这个辅助类来和ALMS打交道的。就代码而言,辅助类只不过是把一些逻辑语义传递给ALMS服务端而已,具体怎么做则完全要看ALMS的实现代码了。??????? ALMS的实现代码并不算太复杂,主要只是在管理“逻辑闹钟”。它把逻辑闹钟分成几个大类,分别记录在不同的列表中。然后ALMS会在一个专门的线程中循环等待闹钟的激发,一旦时机到了,就“回调”逻辑闹钟对应的动作。??????? 以上只是一些概要性的介绍,下面我们来看具体的技术细节。?2.AlarmManager??????? 前文我们已经说过,ALMS只是服务端的东西。它必须向外提供具体的接口,才能被外界使用。在Android平台中,ALMS的外部接口为IAlarmManager。其定义位于frameworks\base\core\java\android\app\IAlarmManager.aidl脚本中,定义截选如下:?interface IAlarmManager { void set(int type, long triggerAtTime, in PendingIntent operation); void setRepeating(int type, long triggerAtTime, long interval, in PendingIntent operation); void setInexactRepeating(int type, long triggerAtTime, long interval, in PendingIntent operation); void setTime(long millis); void setTimeZone(String zone); void remove(in PendingIntent operation);}??????? 在一般情况下,service的使用者会通过Service Manager Service接口,先拿到它感兴趣的service对应的代理I接口,然后再调用I接口的成员函数向service发出请求。所以按理说,我们也应该先拿到一个IAlarmManager接口,然后再使用它。可是,对Alarm Manager Service来说,情况略有不同,其最常见的调用方式如下:manager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);其中,getSystemService()返回的不再是IAlarmManager接口,而是AlarmManager对象。????????? 我们参考AlarmManager.java文件,可以看到AlarmManager类中聚合了一个IAlarmManager接口,private final IAlarmManager mService;也就是说在执行实际动作时,AlarmManager只不过是把外界的请求转发给内部聚合的IAlarmManager接口而已。2.1? AlarmManager的成员函数??????? AlarmManager的成员函数有:AlarmManager(IAlarmManager service)public void set(int type, long triggerAtTime, PendingIntent operation)public void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)public void setInexactRepeating(
文档评论(0)