Android定时器,推荐ScheduledThreadPoolExecutor
Android定时器,推荐ScheduledThreadPoolExecutor
官方网址:http://developer.android.com/reference/java/util/Timer.html
实现定时器的功能,有如下几种方法:
1、Thread的sleep(long)方法
2、Handler的postDelayed(Runnable, long)方法
3、Timer与TimerTask结合的方法
这3种方法,本质上是一样的,都跟线程相关;这里主要讲下Timer。
定时器可以有个名称(name),也可以没有。
定时器,从线程类型的角度,可以分为如下两种:
1、普通类型;
2、后台(Deamon)类型;
Timer()---无名称,普通类型
Timer(String name)---有名称,普通类型
Timer(boolean isDaemon)---无名称,可指定类型
Timer(String name, boolean isDaemon)---有名称,可指定类型
参见:守护线程(Daemon Thread)
定时器,从执行次数的角度,可分为如下两种:
1、仅执行一次;属于这种的,有如下的两个成员函数:
schedule(TimerTask task, Date when)
schedule(TimerTask task, long delay)
2、循环执行;属于这种的,有如下的四个成员函数:
schedule(TimerTask task, Date when, long period)
schedule(TimerTask task, long delay, long period)
scheduleAtFixedRate(TimerTask task, long delay, long period)
scheduleAtFixedRate(TimerTask task, Date when, long period)
前两个,保证执行间隔是稳定的;两个,保证执行时间是稳定的。
由于定时器无法保证实时(real-time )特性;
也就是说,有可能因为某个执行太耗时,导致本该到时的定时器,得不到立即执行。
因此,当出现在这种“已经超时了,才轮到定时器执行”的情况时,就有了如下两种情况:
1、保证执行间隔是稳定的,即scheduledExecuteTime(第n+1次)=realExecuteTime(第n次)+periodTime)
2、保证执行时间是稳定的,即scheduledExecuteTime(第n+1次)=firstExecuteTime +n*periodTime
定时器,还可以取消(cancel())和清理(purge(),即清除所有已取消的)
在JDK1.5之前,定时/周期操作都是通过Timer来实现的。但是Timer有以下几种危险:
1、Timer是基于绝对时间的。容易受系统时钟的影响。
2、Timer只新建了一个线程来执行所有的TimeTask;所有TimeTask可能会受相关影响。
3、Timer不会捕获TimerTask的异常,只是简单地停止;这会影响其他TimeTask的执行。
如果使用JDK1.5以上版本,建议用ScheduledThreadPoolExecutor代替Timer。
它采用相对时间,用线程池来执行TimerTask,会处理TimerTask异常。
它基本上解决了上述的所有问题。
Android定时器,推荐ScheduledThreadPoolExecutor的更多相关文章
- [Android Pro] Android 官方推荐 : DialogFragment 创建对话框
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37815413 1. 概述 DialogFragment在android 3.0时 ...
- android Google推荐的容器SparseArrayCompat简介
android Google推荐的容器SparseArrayCompat简介 private static SparseArrayCompat<BaseFragment> mCaches ...
- 转帖:Android 官方推荐 : DialogFragment 创建对话框
转: Android 官方推荐 : DialogFragment 创建对话框 复制内容,留作备份 1. 概述 DialogFragment在android 3.0时被引入.是一种特殊的Fragment ...
- 定时器Timer&ScheduledThreadPoolExecutor
定时器Timer&ScheduledThreadPoolExecutor /** * @ClassName: TimerTest * @author: daniel.zhao * @date: ...
- Android TitleBar推荐
版权声明:本文为xing_star原创文章,转载请注明出处! 本文同步自http://javaexception.com/archives/206 Android TitleBar推荐 这段时间在帮别 ...
- Android 官方推荐 : DialogFragment 创建对话框
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37815413 1. 概述 DialogFragment在android 3.0时 ...
- android 定时器AlarmManager
1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系 ...
- android 定时器的实现
在Android上常用的定时器有两种,一种是Java.util.Timer,一种就是系统的AlarmService了. 实验1:使用Java.util.Timer. 在onStart()创创建Time ...
- android 定时器的使用
1.android中通常是使用AlarmManager来定时启动一个单次或重复多次操作的.具体的说就是我们通过AlarmManager设定一个时间和注册一个intent到系统中,然后在该时间到来时,系 ...
随机推荐
- linux 学习网站
study-Area:http://www.study-area.org 鸟哥的私房菜:http://linux.vbird.org 鸟哥的私房菜课后答案:http://wapwenku.baidu. ...
- “内部类” 大总结(Java)
(本文整理自很久以前收集的资料(我只是做了排版修改),作者小明,链接地址没有找到,总之感谢,小明) (后面也对"静态内部类"专门做了补充) 内部类的位置: 内部类可以作用在方法里以 ...
- 解决ext时间插件在谷歌下变宽的BUG
在做一个项目时候遇到EXT这么一个问题,现分享出解决问题的代码 Ext.override(Ext.menu.DateMenu, { render: function () { Ext.menu.Dat ...
- Linux-sort用法
本文为转载,原地址:http://www.cnblogs.com/dong008259/archive/2011/12/08/2281214.html sort命令是帮我们依据不同的数据类型进行排序, ...
- BITED数学建模七日谈之五:怎样问数学模型问题
下面进入数学建模经验谈第五天:怎样问数学模型问题 写这一篇的目的主要在于帮助大家能更快地发现问题和解决问题,让自己的模型思路有一个比较好的形成过程. 在我们学习数学模型.准备比赛的时候,经常会遇到各种 ...
- 服务器进程为何通常fork()两次
首先,要了解什么叫僵尸进程,什么叫孤儿进程,以及服务器进程运行所需要的一些条件.两次fork()就是为了解决这些相关的问题而出现的一种编程方法. 孤儿进程 孤儿进程是指父进程在子进程结束之前死亡(re ...
- http协议要点
概念: HTTP是Hyper Text Transfer Protocol(超文本传输协议)的缩写.它的发展是万维网协会(World Wide Web Consortium)和Internet工作小组 ...
- ubuntu 14.04 root破解
Advanced Programmable interrupt controller 高级可编程中断控制;Advanced create table `users` (`id` int(11) not ...
- Cloud_panel
传统基础架构应用程序的系统架构师,云计算应用程序的设计确实是相当有挑战性的工作.体现在应用程序架构师首先要了解云计算环境和传统基础架构的差异并且充分利用云计算平台的一些特点来更好的满足用户需求. 对于 ...
- git(osx)上的一个git commit无法正确提交的问题
我发现在我修改我自己的文件之后企图使用git commit编辑更加详细的争对这次提交的信息的时候 我mac上的vi编辑器貌似 出现了问题 大概报这个错. error: There was a prob ...