`

【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)  
Java代码 
  1. // 取消已经注册的与参数匹配的闹铃   
  2. void   cancel(PendingIntent operation)  
  3.   //注册一个新的闹铃  
  4. void   set(int type, long triggerAtTime, PendingIntent operation)  
  5.   //注册一个重复类型的闹铃  
  6. void   setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation)  
  7.     //设置时区  
  8. 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)。   
Java代码 
  1. public  
  2.  static final int ELAPSED_REALTIME  
  3.           
  4. //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是相对时间,是从系统启动后开始计时的,包括睡眠  
  5. 时间,可以通过调用SystemClock.elapsedRealtime()获得。系统值是3    (0x00000003)。  
  6.         public static final int ELAPSED_REALTIME_WAKEUP  
  7.         //能唤醒系统,用法同ELAPSED_REALTIME,系统值是2 (0x00000002) 。  
  8.         public static final int RTC  
  9.           
  10. //当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它,该闹铃所用的时间是绝对时间,所用时间是UTC时间,可以通过调用  
  11.  System.currentTimeMillis()获得。系统值是1 (0x00000001) 。  
  12.         public static final int RTC_WAKEUP  
  13.         //能唤醒系统,用法同RTC类型,系统值为 0 (0x00000000) 。  
  14.         Public static final int POWER_OFF_WAKEUP  
  15.           
  16. //能唤醒系统,它是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称之为关机闹铃。使用方法同RTC类型,系统值为  
  17. 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 );  
Java代码 
  1. Intent intent = new Intent(AlarmController.this, OneShotAlarm.class);  
  2. PendingIntent sender = PendingIntent.getBroadcast(AlarmController.this0, 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 );  
Java代码 
  1. // The PendingIntent to launch our activity if the user selects this notification  
  2. PendingIntent contentIntent = PendingIntent.getActivity(this0,  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 );  
分享到:
评论

相关推荐

    Androd AlarmManager小闹钟源代码

    这个"小闹钟"程序是基于`AlarmManager`构建的,非常适合初学者学习如何在Android环境中实现定时任务。下面我们将深入探讨`AlarmManager`的工作原理及其在项目中的应用。 `AlarmManager`是Android系统服务之一,它...

    android闹钟AlarmManager

    本教程将深入讲解如何使用`AlarmManager`来实现Android闹钟的基本功能。 一、AlarmManager介绍 `AlarmManager`是Android提供的一个用于管理定时任务的API,它可以在特定的时间点或间隔触发BroadcastReceiver,从而...

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

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

    AlarmManager

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

    android公司内部学习资料

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

    安卓项目 整点报时 AlarmManager service

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

    android 定时器demo

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

    android学习笔记.zip

    通过深入学习以上知识点,并结合“android学习笔记”中的内容,初学者可以逐步建立起对Android开发的全面理解,最终能够独立开发出功能完善的Android应用。记得动手实践是学习过程中不可或缺的部分,多做项目、多...

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

    通过分析这个源码,我们可以深入理解Android应用的开发流程和技术要点。 首先,Android Studio是Google官方推出的集成开发环境(IDE),它为Android应用开发者提供了便捷的开发工具。使用Android Studio,开发者...

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

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

    Android Studio闹钟[android源码]

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

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

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

    android 学习心得

    根据提供的文档内容,我们可以深入探讨Android开发中的多个关键知识点,这些知识点对于初学者以及有一定经验的开发者来说都非常重要。下面将逐一分析: ### 一、Android-Manifest.xml – activity详细说明 `...

    android课表闹钟

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

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

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

    Android 闹钟app 源码 可以自己设定时间 ,适配android 8,9,10,11

    通过深入研究这个源码,开发者不仅可以学习到如何创建一个完整的闹钟应用,还能了解到Android系统的核心组件和设计模式,这对于提升Android开发技能非常有帮助。同时,对于有定制需求的开发者,源码也是一个很好的...

    Android底层原理培训课件全套(500强内部)

    【Android底层原理培训课件全套(500强内部)】是针对Android系统核心机制的一套全面培训资料,涵盖了从开发...通过深入学习,开发者能够更好地理解Android系统的工作原理,从而创建出更加高效、稳定的Android应用程序。

    基于Android的闹钟

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

    Android 闹钟实例源码

    本文将深入探讨“Android 闹钟实例源码”,为初学者提供一个全面的理解和实践平台。 首先,Android 闹钟的实现主要依赖于`AlarmManager`类,它是Android框架提供的用于安排在未来某个时间点执行任务的服务。`...

Global site tag (gtag.js) - Google Analytics