`

深入学习android之AlarmManager

阅读更多

对应AlarmManage有一个AlarmManagerServie服务程 序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册下来的各类闹铃并适时的设置即将触发的闹铃给闹铃设备(在系统中,linux实现的设备名 为”/dev/alarm”),并且一直监听闹铃设备,一旦有闹铃触发或者是闹铃事件发生,AlarmManagerServie服务程序就会遍历闹铃列 表找到相应的注册闹铃并发出广播。该服务程序在系统启动时被系统服务程序system_service启动并初始化闹铃设备(/dev/alarm)。当 然,在JAVA层的AlarmManagerService与Linux Alarm驱动程序接口之间还有一层封装,那就是JNI。

  AlarmManager将应用与服务分割开来后,使得应用程序开发者不用 关心具体的服务,而是直接通过AlarmManager来使用这种服务。这也许就是客户/服务模式的好处吧。AlarmManager与 AlarmManagerServie之间是通过Binder来通信的,他们之间是多对一的关系。

     在android系统中,AlarmManage提供了3个接口5种类型的闹铃服务。

3个接口:

  1. // 取消已经注册的与参数匹配的闹铃    
  2. void    cancel(PendingIntent operation)  
  3.   
  4.   //注册一个新的闹铃   
  5. void    set( int  type,  long  triggerAtTime, PendingIntent operation)  
  6.   
  7.   //注册一个重复类型的闹铃   
  8. void    setRepeating( int  type,  long  triggerAtTime,  long  interval, PendingIntent operation)  
  9.   
  10.     //设置时区   
  11. void    setTimeZone(String timeZone)  

5个闹铃类型

  1. public   static   final   int  ELAPSED_REALTIME  
  2.         // 当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠时 间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3    (0x00000003)。   
  3.   
  4.         public   static   final   int  ELAPSED_REALTIME_WAKEUP  
  5.         //能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。   
  6.   
  7.         public   static   final   int  RTC  
  8.         //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用 System.currentTimeMillis()获得。系统值是1 (0x00000001) 。   
  9.   
  10.         public   static   final   int  RTC_WAKEUP  
  11.         //能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。   
  12.   
  13.         Public static   final   int  POWER_OFF_WAKEUP  
  14.         //能唤醒系统,它是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称之为关机闹铃。使用方法同RTC类型,系统值为4(0x00000004)。   
  

      注意一个重要的参数PendingIntent。这个PendingIntent可以说是 Intent的进一步封装,他既包含了Intent的描述又是Intent行为的执行(这种定义也许不太严格),如果将Intent比作成一个订单的 话,PendingIntent更像是一个下订单的人,因为它既要负责将订单发出去,也要负责订单发送后的处理,比如发送成功后要准备验收订单货物,发送 失败后要重发还是取消订单等操作。开发者可以通过调用getActivity(Context, int, Intent, int)

getBroadcast(Context, int, Intent, int)

getService(Context, int, Intent, int)

三种不同方式来得到一个PendingIntent实例。

getBroadcast——通过该函数获得的PendingIntent将会 扮演一个广播的功能,就像调用 Context.sendBroadcast()函数一样。当系统通过它要发送一个intent时要采用广播的形式,并且在该intent中会包含相应的 intent接收对象,当然这个对象我们可以在创建PendingIntent的时候指定,也可以通过ACTION 和CATEGORY等描述让系统自动找到该行为处理对象。

  1. Intent intent =  new  Intent(AlarmController. this , OneShotAlarm. class );  
  2. PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this 0 , intent,  0 );  

getActivity——通过该函数获得的PendingIntent可以直 接启动新的activity, 就像调用 Context.startActivity(Intent)一样.不过值得注意的是要想这个新的Activity不再是当前进程存在的Activity 时。我们在intent中必须使用Intent.FLAG_ACTIVITY_NEW_TASK.

  1. // The PendingIntent to launch our activity if the user selects this notification   
  2. PendingIntent contentIntent = PendingIntent.getActivity(this 0 ,   new  Intent( this , AlarmService. class ),  0 );  

getService——通过该函数获得的PengdingIntent可以直接启动新的Service,就像调用Context.startService()一样。

  1. // Create an IntentSender that will launch our service, to be scheduled   
  2.     // with the alarm manager.   
  3.     mAlarmSender = PendingIntent.getService(AlarmService.this ,  
  4.                 0 new  Intent(AlarmService. this , AlarmService_Service. class ),  0 ); 

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    android闹钟AlarmManager

    在Android开发中,`AlarmManager`是系统服务之一,它允许应用程序安排在未来的某个时间执行一次性或周期性的操作。这个服务对于实现定时任务,比如定时提醒、后台数据同步等场景非常有用。本教程将深入讲解如何使用`...

    Androd AlarmManager小闹钟源代码

    `AlarmManager`是Android系统服务之一,它可以设置一次性或者重复的提醒。通过它,开发者可以安排在精确的时间点启动一个BroadcastReceiver,执行特定的任务,如发送通知、更新数据或者唤醒设备等。`AlarmManager`...

    AlarmManagerDemo(含 广播, service , activity的demo)

    通过分析`AlarmManagerDemo`,开发者能够深入学习Android系统的关键组件,并学会如何结合它们来实现复杂的功能,这对于Android应用开发是非常有价值的实践。在实际开发中,可以根据此示例进行扩展和修改,以满足特定...

    AlarmManager

    在本文中,我们将深入探讨 `AlarmManager` 的使用方法、特点以及最佳实践。 ### 1. `AlarmManager` 的基本使用 `AlarmManager` 是 Android SDK 的一部分,位于 `android.app` 包下。我们可以通过以下方式获取 `...

    android 定时器demo

    总之,`AlarmManagerDemo`提供了一个实践性的平台,帮助开发者深入学习Android的定时任务实现。通过研究源码,不仅可以掌握定时器的用法,还能了解到Android系统服务的工作原理,提升自己的编程技能。

    安卓项目 整点报时 AlarmManager service

    在这个项目中,我们将深入探讨AlarmManager与Service的结合使用,以及如何实现整点报时的功能。 首先,让我们了解一下AlarmManager的基本用法。AlarmManager是Android的系统服务,可以通过Context.getSystemService...

    Android源码——闹钟源代码.zip

    通过对这些源代码的学习和分析,我们可以深入了解Android系统如何实现闹钟功能。 首先,`DeskClock`是Android系统中的一个应用,它提供了时钟、闹钟、计时器和秒表等功能。在源代码中,我们可以找到关于闹钟设置、...

    Android Studio开发的单词本APP源码(期末大作业)

    这个APP可能是学生在学习Android应用开发时完成的一个重要练习,展示了Android应用的基本架构和功能实现。通过分析这个源码,我们可以深入理解Android应用的开发流程和技术要点。 首先,Android Studio是Google官方...

    android学习笔记.zip

    6. **Android组件**:除了Activity,还包括Service(后台服务)、BroadcastReceiver(广播接收者)、ContentProvider(内容提供者)等,理解它们的作用和用法是深入学习Android的重要部分。 7. **通知与唤醒**:...

    android公司内部学习资料

    这份名为“android公司内部学习资料”的压缩包包含了深入学习Android开发的丰富内容,涵盖了从基础到高级的关键知识点。以下是对各个文件的详细解读: 第一章_Android开发环境.pdf:这一章节通常会讲解如何搭建...

    Android应用源码安卓日程安排提醒日历.zip

    在这款名为"Android应用源码安卓日程安排提醒日历"的项目中,我们可以深入学习Android平台上关于日程管理与提醒功能的实现。这个压缩包包含的源代码为我们提供了实现一个完整日历应用的实例,这对于我们理解Android...

    android定时开关机或重启的代码

    要深入学习和使用这些代码,需要将其导入Android Studio,理解代码逻辑并根据实际需求进行调整。 总结来说,实现Android定时开关机或重启功能需要结合BroadcastReceiver、Service、AlarmManager和权限管理等知识,...

    android课表闹钟

    在Android开发中,"android课表闹钟"是一个常见的应用场景,尤其对于学生用户群体非常实用。...通过学习这个项目的源代码,开发者可以更好地理解和掌握Android中AlarmManager和BroadcastReceiver的使用技巧。

    Android便签应用

    在Android平台上,便签应用是一种常见的工具,它允许用户快速记录和管理日常生活中的想法、待办事项和...通过这个项目,开发者可以深入学习Android平台的开发实践,同时也能为用户提供一个便捷、美观的便签管理工具。

    android 2.3 Calendar源码 0分下载

    通过深入学习这些源码,开发者不仅可以了解Android系统的日历功能,还可以学习到如何构建高效的数据存储系统、如何与其他应用共享数据、如何设置和管理定时任务,以及如何实现用户界面等Android开发的关键技能。...

    Android程序研发源码Android 闹钟源代码.zip

    在Android平台上进行应用...通过研究这个源代码,开发者不仅可以学习到如何在Android上创建闹钟应用,还能深入理解Android系统服务、广播接收器以及系统通知的工作机制,这对于提升Android应用开发能力是非常有帮助的。

    Android Studio闹钟[android源码]

    在Android平台上,开发一款闹钟应用需要对Android Studio的使用、Android SDK以及AlarmManager服务有深入理解。Android Studio是Google官方推出的集成开发环境,用于构建Android应用,它提供了丰富的工具和功能来...

    基于Android的闹钟

    【基于Android的闹钟】程序是一个实用的移动应用,它允许用户在Android设备上设置和管理个人化的提醒。这个程序经过了实际测试,...这个项目对于想要深入学习Android开发的初学者来说,是一个很好的实践和学习平台。

    android 4.0 桌面时钟源码DeskClock

    对于开发者来说,深入理解DeskClock的源码能够帮助我们更好地掌握Android系统的UI设计、多线程处理、时间管理等方面的知识。本文将对Android 4.0版本的DeskClock源码进行详细的分析和解读。 首先,DeskClock应用的...

Global site tag (gtag.js) - Google Analytics