AlarmManager延时任务不生效
来源:互联网 发布:微淘和淘宝的区别 编辑:程序博客网 时间:2024/06/04 19:46
今天在实现一个延时任务时用到了AlarmManager, 想用它实现5秒后打开一个activity的操作。大概代码如下:
Intent intent = new Intent(this, Main2Activity.class); PendingIntent pi = PendingIntent.getActivity(this, 0, intent, 0); AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, System.currentTimeMillis() + 5*1000, pi);
运行后发现不生效,5秒后Main2Activity并未打开。于是查找原因,发现这儿有个值得注意的地方,就是AlarmManager的set()方法:
参数如下:
public void set(int type, long triggerAtMillis, PendingIntent operation)
其中:
第一个参数,type,有四个可选的值:
#ELAPSED_REALTIME 表示任务触发时间从系统开机时间起算,不会唤醒CPU
#ELAPSED_REALTIME_WAKEUP 表示任务触发时间从系统开机时间起算,会唤醒CPU
#RTC 表示任务触发时间从1970年1月1日0点起算,不会唤醒CPU
#RTC_WAKEUP 表示任务触发时间从1970年1月1日0点起算,会唤醒CPU
第二个参数,triggerAtMillis表示任务触发的时间,以毫秒为单位。
要注意的就在这里。上面的代码中,第一个参数是AlarmManager.ELAPSED_REALTIME_WAKEUP,表示任务触发时间从系统开机时间起算,但第二个参数却用的是System.currentTimeMillis() + 5*1000,表示准确触发时间是是自1970年1月1日0时起再加5秒,两个参数不对应,因此延时任务失效。
那么怎么改呢?
可以用下面两种改法:
1.
am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 5*1000, pi);
2.
am.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime() + 5*1000, pi);
总之两个参数所表示的时间计算机制一样就可以了。
阅读全文
0 0
- AlarmManager延时任务不生效
- AlarmManager延迟生效
- 【AlarmManager】使用AlarmManager定时任务
- alarmmanager 定期操作未生效
- 延时生效按钮
- oracle约束延时生效
- android休眠之后 定时任务TimerTask不生效
- crontab定时任务不执行,单独运行sh生效
- 设置定时,任务:AlarmManager
- Service+AlarmManager 定时任务
- alarmmanager定时任务
- AlarmManager 定时任务
- 定时任务,AlarmManager使用
- Android,定时任务AlarmManager
- 定时任务,AlarmManager使用
- AlarmManager定时器发送一个延时广播
- AlarmManager实现精准定时任务
- AlarmManager实现精准定时任务
- 桌面悬浮小火箭的实现
- hdu2141(二分)
- 从零开始前端学习[25]:万一你没有UI美工的时候,就要选择阿里矢量图了
- 巩固练习题1
- 策略模式与状态模式这一对孪生兄弟
- AlarmManager延时任务不生效
- request
- 并发包消息队列BlockingQueue与反射api
- 第四周项目3
- leetcode Symmetric Tree
- 算法练习(9):Longest Common Prefix
- luogu1516 POJ1061 青蛙的约会
- Xilinx ZYNQ 7000+Vivado2015.2系列(三)之HelloWorld实验(最小系统)(纯PS)
- 前端入门理解