Android 编程下 AlarmManager
对应 AlarmManager 有一个 AlarmManagerServie 服务程序,该服务程序才是正真提供闹铃服务的,它主要维护应用程序注册的各类闹铃并适时的设置即将触发的闹铃给闹铃设备 ( 在系统中,Linux 实现的设备名为 ”/dev/alarm” ) ,并且一直监听闹铃设备,一旦有闹铃触发或者是闹铃事件发生,AlarmManagerServie 服务程序就会遍历闹铃列表找到相应的注册闹铃并发出广播。该服务程序在系统启动时被系统服务程序 system_service 启动并初始化闹铃设备 ( /dev/alarm ) 。当然,在 JAVA 层的 AlarmManagerService 与 Linux Alarm 驱动程序接口之间还有一层封装,那就是 JNI。(参考官方文档:AlarmManager | Android Developers)
AlarmManager 将应用与服务分割开来后,使得应用程序开发者不用关心具体的服务,而是直接通过 AlarmManager 来使用这种服务。这也许就是客户/服务模式的好处吧。AlarmManager 与 AlarmManagerServie 之间是通过 Binder 来通信的,他们之间是多对一的关系。
AlarmManager 提供了 8 个与之相关的方法:
|
AlarmManager Public Methods (方法) |
||||||||||||||||
| void |
cancel(PendingIntent operation) 取消参数匹配的闹铃 |
|||||||||||||||
| void |
set(int type, long triggerAtMillis, PendingIntent operation) 注册一个新的闹铃 |
|||||||||||||||
| void |
setExact(int type, long triggerAtMillis, PendingIntent operation) 注册一个新的闹铃,这个闹铃将在指定的时间被准确的执行 |
|||||||||||||||
| void |
setInexactRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation) 注册一个对触发时间并不是很精准的闹铃,例如,一个闹铃每小时都会重复,但不一定都是在每个小时的最开始被触发 |
|||||||||||||||
| void |
setRepeating(int type, long triggerAtMillis, long intervalMillis, PendingIntent operation) 注册一个重复类型的闹铃 |
|||||||||||||||
| void |
setTime(long millis) 设定系统时钟时间 |
|||||||||||||||
| void |
setTimeZone(String timeZone) 设置系统默认时区 |
|||||||||||||||
| void |
setWindow(int type, long windowStartMillis, long windowLengthMillis, PendingIntent operation) 注册一个闹铃,这个闹铃将在给定的时间窗口内被触发 |
|||||||||||||||
|
Constants (类型) |
||||||||||||||||
|
public static final int ELAPSED_REALTIME Constant Value: 3 (0x00000003) 这种类型的闹铃不会唤醒系统,如果这种闹铃在系统休眠状态终止,它会在系统下次唤醒的时候被触发。该种闹铃所用的时间是相对时间,是从系统启动后开始 计时的,包括睡眠时间,可以通过调用 SystemClock.elapsedRealtime() 获得。 |
||||||||||||||||
|
public static final int ELAPSED_REALTIME_WAKEUP Constant Value: 2 (0x00000002) 这种类型的闹铃能在终止的时候唤醒系统,用法同 ELAPSED_REALTIME。 |
||||||||||||||||
|
public static final long INTERVAL_DAY Constant Value: 86400000 (0x0000000005265c00) |
||||||||||||||||
|
public static final long INTERVAL_FIFTEEN_MINUTES Constant Value: 900000 (0x00000000000dbba0) |
||||||||||||||||
|
public static final long INTERVAL_HALF_DAY Constant Value: 43200000 (0x0000000002932e00) |
||||||||||||||||
|
public static final long INTERVAL_HALF_HOUR Constant Value: 1800000 (0x00000000001b7740) |
||||||||||||||||
|
public static final long INTERVAL_HOUR Constant Value: 3600000 (0x000000000036ee80) |
||||||||||||||||
|
public static final int RTC Constant Value: 1 (0x00000001) 这种类型的闹铃不会唤醒系统,如果这种闹铃在系统休眠状态终止,它会在系统下次唤醒的时候被触发。该闹铃所用的时间是绝对时间,可以通过调用 System.currentTimeMillis() (wall clock time in UTC) 获得。 |
||||||||||||||||
|
public static final int RTC_WAKEUP Constant Value: 0 (0x00000000) 这种类型的闹铃能在终止的时候唤醒系统,用法同 RTC。 |
注意一个重要的参数 PendingIntent。这个 PendingIntent 可以说是 Intent 的进一步封装, 因为它不仅对 Intent 进行了描述,也对使用该 Intent 所要完成的目标动作进行了描述。开发者可以通过以下六个方法来获得 PendingIntent 实例。(参考官方文档:PendingIntent | Android Developers)
|
PendingIntent Public Methods (方法) |
||||||||||||||||
| static PendingIntent |
getActivities(Context context, int requestCode, Intent[] intents, int flags) 方法同 getActivity(Context, int, Intent, int),但允许提交一个由多个 Intent 组成的数组 |
|||||||||||||||
| static PendingIntent |
getActivities(Context context, int requestCode, Intent[] intents, int flags, Bundle options) 方法同 getActivity(Context, int, Intent, int),但允许提交一个由多个 Intent 组成的数组 |
|||||||||||||||
| static PendingIntent |
getActivity(Context context, int requestCode, Intent intent, int flags) 返回一个可以打开新 Activity 的 PendingIntent,相当于调用 Context.startActivity(Intent)。 |
|||||||||||||||
| static PendingIntent |
getActivity(Context context, int requestCode, Intent intent, int flags, Bundle options) 返回一个可以打开新 Activity 的 PendingIntent,相当于调用 Context.startActivity(Intent)。 |
|||||||||||||||
| static PendingIntent |
getBroadcast(Context context, int requestCode, Intent intent, int flags) 返回一个可以发送广播的 PendingIntent,相当于调用 Context.sendBroadcast()。 |
|||||||||||||||
| static PendingIntent |
getService(Context context, int requestCode, Intent intent, int flags) 返回一个可以启动服务的 PendingIntent,相当于调用 Context.startService()。 |
|||||||||||||||
Android 编程下 AlarmManager的更多相关文章
- Android 编程下 App Install Location
从 API 8 开始(参考官方文档:App Install Location | Android Developers),你可以将你的应用安装在外部储存中(例如,安装到设备的 SD 卡上).这是一个可 ...
- Android 编程下的自定义 xmlns
什么是 xmlns xmlns是 XML Namespaces 的缩写,中文名称是 XML命名空间. xmlns 使用规则 xmlns:namespace-prefix="namespace ...
- Android 编程下 DP、SP 以及屏幕像素密度
有时需为视图属性指定大小尺寸值(通常以像素为单位,但有时也用点.毫米或英寸).最常见的属性有: 文字大小(Text Size),指设备上显示的文字像素高度: 边距(Margin),指定视图组件间的距离 ...
- Android 编程下 Touch 事件的分发和消费机制
Android 中与 Touch 事件相关的方法包括:dispatchTouchEvent(MotionEvent ev).onInterceptTouchEvent(MotionEvent ev). ...
- Android 编程下的四大组件之服务(Service)
服务(Service) 是一种在后台运行,没有界面的组件,由其他组件调用开始.Android 中的服务和 Windows 中的服务是类似的东西,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类 ...
- Android 编程下的 Secret Code
我们很多人应该都做过这样的操作,打开拨号键盘输入 *#*#4636#*#* 等字符就会弹出一个界面显示手机相关的一些信息,这个功能在 Android 中被称为 Android Secret Code, ...
- Android 编程下图片的内存优化
1. 对图片本身进行操作 尽量不要使用 setImageBitmap.setImageResource. BitmapFactory.decodeResource 来设置一张大图,因为这些方法在完成 ...
- Android 编程下的代码混淆
什么是代码混淆 Java 是一种跨平台的.解释型语言,Java 源代码编译成中间”字节码”存储于 class 文件中.由于跨平台的需要,Java 字节码中包括了很多源代码信息,如变量名.方法名,并且通 ...
- Android 编程下去除 ListView 上下边界蓝色或黄色阴影
默认的情况下,在 ListView 滑动到顶部或者是底部的时候,会有黄色或者蓝色的阴影出现.在不同的版本上解决的方法是不同的,在 2.3 版本之前可以在 ListView 的属性中通过设置 andro ...
随机推荐
- scipy稀疏矩阵
那些零元素数目远远多于非零元素数目,并且非零元素的分布没有规律的矩阵称为稀疏矩阵(sparse matrix). 不同类型的矩阵有不同的压缩方式,比如对角矩阵只存储对角元素即可.要想充分压缩,就要找到 ...
- mysql FullText全文索引的问题
今天有同学问题,搜索ip的时候怎样能把 select ip from tabelx where ip like '%192.168.0.1%' 这种句子的性能优化. 的确,使用 like %x 的方式 ...
- Canvas文本操作
Canvas的画图环境提供三个方法如:绘制填充文本:fillText();绘制描边文本:strokeText();绘制文本并返回一个对象:measure();measure()方法返回的对象中包括一个 ...
- angularjs框架及其生态环境 --待续
angular的MVVM框架结构: 1. app, 2.routes, config, 3.module, 4.Controller, $scope,controller参数,事件 ...
- java设置配置session过期时间的方法
1) Timeout in the deployment descriptor (web.xml)以分钟为单位 代码如下 复制代码 <web-app ...> <session-co ...
- Source Insight中代码块注释
转载:http://blog.csdn.net/cindylx422/article/details/7560786 修改工程目录下的utils.em文件,将下面代码添加到末尾,然后将此文件添加到工程 ...
- tomcat jvm 参数优化
1. 内存设置 常见配置汇总 堆设置 -Xms:初始堆大小 -Xmx:最大堆大小 -XX:NewSize=n:设置年轻代大小 -XX:NewRatio=n:设置年轻代和年老代的比值.如:为3,表示年轻 ...
- Android开发之AsyncTask的使用
Android API 3时引进了AsyncTask,也叫异步任务.使用它可以很方便的更新主线程中的UI,使用它比Handler.Thread更简单.由于AsyncTask是抽象类,要使用它首先要创建 ...
- flock防止crontab脚本周期内未执行完重复执行(转)
如果某脚本要运行30分钟,可以在Crontab里把脚本间隔设为至少一小时来避免冲突.而比较糟的情况是可能该脚本在执行周期内没有完成,接着第二个脚本又开始运行了.如何确保只有一个脚本实例运行呢?一个好用 ...
- Win7/Win8.1右键菜单技巧:应用程序任意加
对于Win7.Win8.1老用户来说,日常使用中离不开双击各类第三方应用程序,尤其是常用的记事本.QQ聊天.关机.一键截图等程序,这时我们不妨将这些“右键菜单”,轻松实现一键开启QQ.截图或者关机等功 ...