Android 定时任务刷新的多种实现方式
来源:互联网 发布:男生不喜欢女生 知乎 编辑:程序博客网 时间:2024/06/06 15:53
1.采用Handle与线程的sleep(long)方法
1) 定义一个Handler类,用于处理接受到的Message。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
3) 在需要启动线程的地方加入下面语句:
分析:纯正的java原生实现,在sleep结束后,并不能保证竞争到cpu资源,这也就导致了时间上必定>=10000的精度问题。
2.采用Handler的postDelayed(Runnable, long)方法
1)定义一个Handler类
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2) 启动与关闭计时器
- 1
- 1
分析:嗯,看起蛮不错,实现上也简单了,和sleep想必还不会产生阻塞,注意等待和间隔的区别。
3.采用Handler与timer及TimerTask结合的方法
1) 定义定时器、定时器任务及Handler句柄
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
2) 初始化计时器任务
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3) 启动和关闭定时器
- 1
- 1
此外,Timer也可以配合runOnUiThread实现,如下
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
分析:timer.schedule(task, 2000, 3000);
意思是在2秒后执行第一次,之后每3000秒在执行一次。timer不保证精确度且在无法唤醒cpu,不适合后台任务的定时。
采用AlarmManger实现长期精确的定时任务
AlarmManager的常用方法有三个:
- set(int type,long startTime,PendingIntent pi);//一次性
- setExact(int type, long triggerAtMillis, PendingIntent operation)//一次性的精确版
- setRepeating(int type,long startTime,long intervalTime,PendingIntent
pi);//精确重复 - setInexactRepeating(int type,long startTime,long
intervalTime,PendingIntent pi);//非精确,降低功耗
type表示闹钟类型,startTime表示闹钟第一次执行时间,long intervalTime表示间隔时间,PendingIntent表示闹钟响应动作
对以上各个参数的详细解释
闹钟的类型:
- AlarmManager.ELAPSED_REALTIME:休眠后停止,相对开机时间
- AlarmManager.ELAPSED_REALTIME_WAKEUP:休眠状态仍可唤醒cpu继续工作,相对开机时间
- AlarmManager.RTC:同1,但时间相对于绝对时间
- AlarmManager.RTC_WAKEUP:同2,但时间相对于绝对时间
- AlarmManager.POWER_OFF_WAKEUP:关机后依旧可用,相对于绝对时间
绝对时间:1970 年 1月 1 日 0 点
startTime:
闹钟的第一次执行时间,以毫秒为单位,一般使用当前时间。
- SystemClock.elapsedRealtime():系统开机至今所经历时间的毫秒数
- System.currentTimeMillis():1970 年 1 月 1 日 0 点至今所经历时间的毫秒数
intervalTime:执行时间间隔。
PendingIntent :
PendingIntent用于描述Intent及其最终的行为.,这里用于获取定时任务的执行动作。
详细参考译文:PendingIntent
利用AlarmManger+Service+BarocastReceiver实现5s一次打印操作
服务类:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
广播接受器
- 1
- 2
- 3
- 4
- 5
- 6
- 7
启动定时任务:
- Android 定时任务刷新的多种实现方式
- Android 定时任务的多种实现方式
- 多种方式实现Android定时任务
- 多种方式实现Android定时任务,哪一款是你的FEEL?
- Java实现定时任务的多种方法
- 定时任务的实现方式
- java定时任务多种实现
- android 定时任务的几种实现方式
- android定时任务的几种实现方式
- android 定时任务的几种实现方式
- android 实现定时任务的几种方式
- Android中的定时任务实现方式
- php自动刷新与关闭页面后继续执行,定时任务的实现方式
- android定时任务的实现
- Android 定时任务的实现
- javaWeb定时任务的一种实现方式
- 实现定时任务的几种方式
- Spring定时任务的实现方式--ScheduledExecutorService
- J2EE相关概念
- 土豪向往技术宅,迪拜欲成中东的区块链老大
- python 高度健壮性爬虫的异常和超时问题
- PHP关于时间的时间戳
- 利用某网站注册短信验证码漏洞,抓包改包实现短信轰炸骚扰
- Android 定时任务刷新的多种实现方式
- iOS真机调试出错解决方法
- 在redis使用过程遇到的一些问题的总结
- 做机械臂导航时遇到的问题7:正向运动学求解:在关节空间进行规划
- spring boot 框架处理spring data jpa的session
- mysql表连接 left join
- Java读取csv文件并将内容插入到数据库
- linux(centos) 挂载硬盘
- spark学习-63-源代码:schedulerBackend和taskScheduler的创建(1)-local