<转载>基础篇、AlarmManager类的作用

来源:互联网 发布:mysql批量insert限制 编辑:程序博客网 时间:2024/06/10 05:52
原地址:http://blog.csdn.net/lonelyroamer/article/details/7547186
 

基础篇、AlarmManager类的作用

分类: Android闹钟系统全面研究 229人阅读 评论(0) 收藏 举报
[java] view plaincopy
  1. 下面是AlarmManager的源码,自己按照理解看了一遍,英文水平不咋滴,许多英文注释看不太懂,只能理解个大概的意思。  
  2.   
  3. /** 
  4.  * 这个类提供访问系统的闹钟服务。它允许你按照自己的设定,在未来的某个时间点运行你的程序。 
  5.  * 当一个闹钟运行,并且它所关联的intent已经通过系统广播进行了注册,如果这个应用没有正在运行, 
  6.  * 那么,它就会自己去开启这个指定的 应用程序。 
  7.  * 设备处于待机状态时候,已经注册的闹钟也会一直保留(在这段时间里,如果闹钟指定的时间到了,它可以随意的唤醒这个设备)。 
  8.  * 但是闹钟会在关机或者重启的情况下全部被清除掉。 
  9.  */  
  10. package android.app;  
  11.   
  12. import android.content.Context;  
  13. import android.content.Intent;  
  14. import android.os.RemoteException;  
  15. import android.os.ServiceManager;  
  16.   
  17. public class AlarmManager  
  18. {  
  19.     /** 
  20.      * 指定当系统调用的System.currentTimeMillis()方法返回值和triggerAtTime相等时,启动operation所对应的 
  21.      * 组件,当系统在睡眠状态时候,也会唤醒 
  22.      */  
  23.     public static final int RTC_WAKEUP = 0;  
  24.       
  25.       
  26.     /** 
  27.      *指定当系统调用的System.currentTimeMillis()方法返回值和triggerAtTime相等时,启动operation所对应的组件, 
  28.      *当系统进入睡眠状态时,这种类型的闹铃不会唤醒系统。直到系统下次被唤醒才传递它。 
  29.      */  
  30.     public static final int RTC = 1;  
  31.       
  32.       
  33.     /** 
  34.      *指定从现在开始过一段时间后启动operation对应的组件,这种类型的闹钟可以唤醒系统 
  35.      */  
  36.     public static final int ELAPSED_REALTIME_WAKEUP = 2;  
  37.       
  38.       
  39.     /** 
  40.      *指定从现在开始过一段时间后启动operation对应的组件,这种类型的闹钟不会唤醒系统 
  41.      */  
  42.     public static final int ELAPSED_REALTIME = 3;  
  43.   
  44.       
  45.     /**Google尚未开源的类IAlarmManager,后面单独介绍*/  
  46.     private final IAlarmManager mService;  
  47.       
  48.       
  49.     /** 
  50.      * 该构造器是默认类型default,也就是说,只有同包的类才能够通过new构造AlarmManager对象 
  51.      */  
  52.     AlarmManager(IAlarmManager service) {  
  53.         mService = service;  
  54.     }  
  55.       
  56.   
  57.     /** 
  58.      * 设置一个闹钟。注意:使用Handler可以更简单更有效的运行。 
  59.      * 如果已经有一个闹钟有相同的IntentSender,那么它就会被取消。 
  60.      * 如果这个时间是在过去,那么这个闹钟就会立即触发。如果这个Intent已经有了一个设定的闹钟, 
  61.      * 那么就会取代最开始的那一个。 
  62.      * 这个闹钟是一个广播意图,将被传送到一个你已经注册了的广播receiver, 
  63.  
  64.      * 参数:下面类型之一ELAPSED_REALTIME, ELAPSED_REALTIME_WAKEUP, RTC or 
  65.      *             RTC_WAKEUP. 
  66.      * 参数: triggerAtTime 开始的时间 
  67.      * 参数: operation 将要启动的组件 
  68.      */  
  69.     public void set(int type, long triggerAtTime, PendingIntent operation) {  
  70.         try {  
  71.             mService.set(type, triggerAtTime, operation);  
  72.         } catch (RemoteException ex) {  
  73.         }  
  74.     }  
  75.   
  76.     /** 
  77.      *设置一个周期性的闹钟。 
  78.      */  
  79.     public void setRepeating(int type, long triggerAtTime, long interval,  
  80.             PendingIntent operation) {  
  81.         try {  
  82.             mService.setRepeating(type, triggerAtTime, interval, operation);  
  83.         } catch (RemoteException ex) {  
  84.         }  
  85.     }  
  86.   
  87.     /** 
  88.      * Available inexact recurrence intervals recognized by 
  89.      * {@link #setInexactRepeating(int, long, long, PendingIntent)}  
  90.      */  
  91.     public static final long INTERVAL_FIFTEEN_MINUTES = 15 * 60 * 1000;  
  92.     public static final long INTERVAL_HALF_HOUR = 2*INTERVAL_FIFTEEN_MINUTES;  
  93.     public static final long INTERVAL_HOUR = 2*INTERVAL_HALF_HOUR;  
  94.     public static final long INTERVAL_HALF_DAY = 12*INTERVAL_HOUR;  
  95.     public static final long INTERVAL_DAY = 2*INTERVAL_HALF_DAY;  
  96.       
  97.     /** 
  98.      * 设置一个非精准的周期性闹钟 
  99.      * 举个例子:一个闹钟每个小时都会重复,但是它不一定在每个小时的开始时候启动闹钟服务。 
  100.      */  
  101.     public void setInexactRepeating(int type, long triggerAtTime, long interval,  
  102.             PendingIntent operation) {  
  103.         try {  
  104.             mService.setInexactRepeating(type, triggerAtTime, interval, operation);  
  105.         } catch (RemoteException ex) {  
  106.         }  
  107.     }  
  108.       
  109.     /** 
  110.      * 取消任何一个闹钟,只要符合所传入的意图, 
  111.      */  
  112.     public void cancel(PendingIntent operation) {  
  113.         try {  
  114.             mService.remove(operation);  
  115.         } catch (RemoteException ex) {  
  116.         }  
  117.     }  
  118.   
  119.     /** 
  120.      * 设置系统挂钟的时间 
  121.      * 需要权限 android.permission.SET_TIME 
  122.      * 参数:长整型的时间计数 
  123.      */  
  124.     public void setTime(long millis) {  
  125.         try {  
  126.             mService.setTime(millis);  
  127.         } catch (RemoteException ex) {  
  128.         }  
  129.     }  
  130.   
  131.     /** 
  132.      * 设置系统默认的时区 
  133.      * 需要权限android.permission.SET_TIME_ZONE 
  134.      * 参数:时区格式的字符串参数,设置时区 
  135.      */  
  136.     public void setTimeZone(String timeZone) {  
  137.         try {  
  138.             mService.setTimeZone(timeZone);  
  139.         } catch (RemoteException ex) {  
  140.         }  
  141.     }  
  142. }  


通过上面,就可以看出,想要设置一个闹钟,就必须要使用AlarmManager对象。

AlarmManager实际作用不仅仅作为闹钟,实际上它是一个全局的计时器,可以在指定时间或指定周期内执行某个组件(Activity,Service,BroadcastReceiver);

原创粉丝点击