《第一行代码》学习笔记39-服务Service(6)
1.Android中定时任务一般有两种实现方式:(1)使用Java API里提供的Timer类;(2)使用Android的Alarm机制。
但是,Timer类有个明显的短板,不太适用于那些需要长期在后台运行的定时任务。
2.为了让电池更加耐用,每种手机都有自己的休眠政策,Android手机会在长时间不操作的情况下自动让CPU进入到
睡眠状态,可能导致Timer类中的定时任务无法正常运行;而Alarm机制具有唤醒CPU功能,可以保证每次需要执行
定时任务时CPU都能正常工作。
3.获取个AlarmManager实例:
AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
接下来调用AlarmManager的set()方法,可以设置个定时任务:
long triggerAtTime = SystemClock.elapsedRealtime() + 10 * 1000; //设定个任务在10秒后执行
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pendingIntent);
set()方法,第一个参数是整型参数,指定AlarmManager的工作类型,
ELAPSED_REALTIME:定时任务的触发时间从系统开机开始算起,不会唤醒CPU。
ELAPSED_REALTIME_WAKEUP:定时任务的触发时间从系统开机开始算起,会唤醒CPU。
RTC:定时任务的触发时间从1970年1月1日0点算起,不会唤醒CPU。
RTC_WAKEUP:定时任务的触发时间从1970年1月1日0点算起,会唤醒CPU。
4.使用SystemClock.elapsedRealtime()方法可获取到系统开机至今所经历时间的毫秒数,
使用System.currentTimeMillis()方法可获取到1970年1月1日0点至今所经历时间的毫秒数。
5.第二个参数,定时任务触发的时间,以毫秒为单位,这里是传入开机至今的时间或1970年1月1日0点至今的时间,最后再
加上延迟执行的时间。第三个是一个PendingIntent,一般调用getBroadcast()方法来获取一个能够执行广播的PendingIntent。
当定时任务被触发的时候,广播接收器的onReceive()方法可以得到执行。
最新文章
- C语言 · 矩阵乘法 · 算法训练
- C#调用SendMessage 用法
- 【转载】64 位 Windows 内核虚拟地址空间布局(基于 X64 CPU)
- Leetcode Longest Common Prefix
- Excel大批量导入数据到SQLServer数据库-万条只用1秒
- paip. 解决php 以及 python 连接access无效的参数量。参数不足,期待是 1”的错误
- oss cmd
- 从DB灌值到DataTable时,字段值为NULL时报错相关信息;
- 介绍Git版本控制器的使用
- unserialize函数中的参数是否是污染数据
- UML元素分析
- poj 2411 Mondriaan's Dream(状态压缩dP)
- 查询两个日期(时间)以内的数据,between and 或 and 连>;= <;=,to_date()
- 找不到Qt5Cored.dll(Release和Debug版连接了不同的库)
- Collections类方法详解
- LoadRunner11_录制Oracle数据库脚本
- SpringBoot 4.SpringBoot 整合 devtools 实现热部署
- STM32L011D4 ----- 使用注意
- 论文笔记:Joint Embeddings of Shapes and Images via CNN Image Purification
- JS — 数组去重(4种方法)