android之AlarmManager 全局定时器
AlarmManager实质是一个全局的定时器,是Android中常用的一种系统级别的提示服务,在指定时间或周期性启动其它组件(包括Activity,Service,BroadcastReceiver)。
概述:
该类提供一种访问系统闹钟服务的方式,允许你去设置在将来的某个时间点去执行你的应用程序。当你的闹钟响起(时间到)时,在它上面注册的一个意图(Intent)将会被系统以广播发出,然后自动启动目标程序,如果它没有正在运行。注册的闹钟会被保留即使设备处于休眠中(如果闹钟在给定时间响起可以选择是否唤醒设备)。如果闹钟关闭或者重启,闹钟将被清除。
只要广播的onReceive()方法正在执行,这闹钟管理者(AlarmManager)会持有一个CPU唤醒锁,这是为了保证手机不会休眠直到处理完该广播,一旦onReceive()返回,那么闹钟管理者将会释放唤醒锁。这意味着只要OnReceive()方法完成,你的手机可能在某些情况下进入休眠,如果你的闹钟广播接收者调用的是Context.startService(),那么手机有可能在被请求的服务执行之前进入休眠,为了防止这种情况,你的BroadcastReceiver和服务需要实现一个单独的唤醒锁策略以确保手机继续运行,直到服务可用。
注:该类适用于你想让应用程序在将来某个指定时间点执行的情况,即使你的应用程序现在没有运行。对一般的时间操作,使用Handler是更容易和更有效率的。
公有方法:
|
Public Methods |
|||||||||||
|
void |
cancel(PendingIntent operation) 取消AlarmManager的定时服务。 |
||||||||||
|
void |
set(int type, long triggerAtTime, PendingIntent operation) 设置在triggerAtTime时间启动由operation参数指定的组件。(该方法用于设置一次性闹钟) |
||||||||||
|
void |
setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 设置一个非精确的周期性任务。 |
||||||||||
|
void |
setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 设置一个周期性执行的定时服务。 |
||||||||||
|
void |
setTime(long millis) 设置系统“墙”时钟。需要android.permission.SET_TIME.权限。 |
||||||||||
|
void |
setTimeZone(String timeZone) 设置系统的默认时区。需要android.permission.SET_TIME_ZONE.权限。 |
||||||||||
常用方法说明:
AlarmManager的常用方法有三个:
(1)set(int type,long startTime,PendingIntent pi)
该方法用于设置一次性闹钟。
第一个参数int type指定定时服务的类型,该参数接受如下值:
? ELAPSED_REALTIME
在指定的延时过后,发送广播,但不唤醒设备(闹钟在睡眠状态下不可用)。如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒。
? ELAPSED_REALTIME_WAKEUP
在指定的延时过后,发送广播,并唤醒设备(即使关机也会执行operation所对应的组件) 。
延时是要把系统启动的时间SystemClock.elapsedRealtime()算进去的,具体用法看代码。
? RTC
指定当系统调用System.currentTimeMillis()方法返回的值与triggerAtTime相等时启动operation所对应的设备(在指定的时刻,发送广播,但不唤醒设备)。如果在系统休眠时闹钟触发,它将不会被传递,直到下一次设备唤醒(闹钟在睡眠状态下不可用)。
? RTC_WAKEUP
指定当系统调用System.currentTimeMillis()方法返回的值与triggerAtTime相等时启动operation所对应的设备(在指定的时刻,发送广播,并唤醒设备)。即使系统关机也会执行 operation所对应的组件。
第二个参数表示闹钟执行时间。
第三个参数PendingIntent pi表示闹钟响应动作:
PendingIntent pi:是闹钟的执行动作,比如发送一个广播、给出提示等等。PendingIntent是Intent的封装类。需要注意的是,如果是通过启动服务来实现闹钟提示的话,PendingIntent对象的获取就应该采用Pending.getService(Context c,int i,Intentintent,int j)方法;如果是通过广播来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getBroadcast(Context c,inti,Intent intent,int j)方法;如果是采用Activity的方式来实现闹钟提示的话,PendingIntent对象的获取就应该采用PendingIntent.getActivity(Context c,inti,Intent intent,int j)方法。如果这三种方法错用了的话,虽然不会报错,但是看不到闹钟提示效果。
(2)setRepeating(int type,long startTime,long intervalTime,PendingIntent pi)
设置一个周期性执行的定时服务。第一个参数表示闹钟类型,第二个参数表示闹钟首次执行时间,第三个参数表示闹钟两次执行的间隔时间,第三个参数表示闹钟响应动作。
(3)setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi)
该方法也用于设置重复闹钟,与第二个方法相似,不过其两个闹钟执行的间隔时间不是固定的而已。它相对而言更省电(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。 第三个参数intervalTime为闹钟间隔,内置的几个变量如下:
INTERVAL_DAY: 设置闹钟,间隔一天
INTERVAL_HALF_DAY: 设置闹钟,间隔半天
INTERVAL_FIFTEEN_MINUTES:设置闹钟,间隔15分钟
INTERVAL_HALF_HOUR: 设置闹钟,间隔半个小时
INTERVAL_HOUR: 设置闹钟,间隔一个小时
android之AlarmManager 全局定时器的更多相关文章
- 我的Android进阶之旅------>Android使用AlarmManager全局定时器实现定时更换壁纸
该DEMO将会通过AlarmManager来周期的调用ChangeService,从而让系统实现定时更换壁纸的功能. 更换壁纸的API为android.app.WallpaperManager,它提供 ...
- Android之AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
1.AlarmManager,顾名思义,就是“提醒”,是Android中常用的一种系统级别的提示服务,可以实现从指定时间开始,以一个固定的间隔时间执行某项操作,所以常常与广播(Broadcast)连用 ...
- Android AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似.都有两种相似的用法:(1)在指定时长后执行某项操 ...
- AlarmManager(全局定时器/闹钟)详解
AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟.指定时长或以周期形式执行某项操作.通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似.都有两种相似的 ...
- Android 开发 AlarmManager 定时器
介绍 AlarmManager是Android中常用的一种系统级别的提示服务,在特定的时刻为我们广播一个指定的Intent.简单的说就是我们设定一个时间,然后在该时间到来时,AlarmManager为 ...
- Android利用AlarmManager执行定时任务
Android中的AlarmManager功能很强大,它是一个全局定时器,可以在指定时间或者指定周期启动其他组件(包括Activity.Service.BroadcastReceiver). 使用Al ...
- Android闹钟 AlarmManager的使用
Android闹钟 AlarmManager的使用 AlarmManager介绍 AlarmManager这个类提供对系统闹钟服务的访问接口. 你可以为你的应用设定一个在未来某个时间唤醒的功能. 当闹 ...
- Android中AlarmManager使用示例(持续更新,已经更改)
现在普遍的手机都会有一个闹钟的功能,如果使用Android来实现一个闹钟可以使用AtarmManager来实现.AtarmManager提供了一种系统级的提示服务,允许你安排在将来的某个时间执行一个服 ...
- Android 的 AlarmManager 和 wakeLock联合使用
http://stackoverflow.com/questions/6864712/android-alarmmanager-not-waking-phone-up 主要说的是,对于android ...
随机推荐
- [设计模式] 15 解释器模式 Interpreter
在GOF的<设计模式:可复用面向对象软件的基础>一书中对解释器模式是这样说的:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子.如果一种特定类 ...
- PE文件结构详解(四)PE导入表
PE文件结构详解(二)可执行文件头的最后展示了一个数组,PE文件结构详解(三)PE导出表中解释了其中第一项的格式,本篇文章来揭示这个数组中的第二项:IMAGE_DIRECTORY_ENTRY_IMPO ...
- uva 10617
当s[i] = s[j] dp[i][j] = 1+dp[i+1][j-1]+dp[i+1][j]+dp[i][j-1]-dp[i+1][j-1] = 1+dp[i][j-1]+dp[i+1][j ...
- Sublime Text 3 搭建 React.js 开发环境
sublime有很强的自定义功能,插件库很庞大,针对新语言插件更新很快,配合使用可以快速搭建适配语言的开发环境. 1. babel 支持ES6, React.js, jsx代码高亮,对 JavaScr ...
- TVM 下载监控
iftop -n -i em1 -F 218.26.188.220/32 到10.10.81.23上用上面的语句看山西的流量. 到/opt/data/log/下看日志 到/opt/data/tvmca ...
- no such partition grub rescue>
事出有因: 电脑系统是win7+ubuntu,然后在win7下把ubuntu的分区给删除了,重启,出现 no such partition grub rescue> 错误. 原因是双系统之前是由 ...
- *[hackerrank]ACM ICPC Team
https://www.hackerrank.com/contests/w6/challenges/acm-icpc-team 这道题在contest的时候数据量改小过,原来的数据量需要进行优化才能过 ...
- Linux之SAMBA共享服务
简述 Samba服务器可以让Windows操作系统用户访问局域网中Linux主机,就象访问网上邻居一样方便. 具有以下功能: 共享目录:在局域网上共享某个或某些目录,使得同一个网络内的Windows用 ...
- eclipse中的工程中有叉叉
在eclipse中的工程中有叉叉,并且不是编译的错. 那么,让eclipse自己告诉你原因吧.菜单Window->Show View->Problems 然后就去解决相应的Problems ...
- Ios 弹框 MJPopup,KxMenu
IOS 弹框 如果直接弹出一个自定义的视图 可以选用第三方: MJPopup 弹出: if(!bandview) { bandview=[[[NSBundle mainBundle]loadNibNa ...