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到系统中,然后在该时间到来时,系 ...
随机推荐
- LR之性能分析基础
1.判断测试结果有效性 2.分析要点提示 3.Analysis主要提供的6大类分析图 4.分析流程
- C++ 中类的构造函数理解(二)
C++ 中类的构造函数理解(二) 写在前面 上次的笔记中简要的探索了一下C++中类的构造函数的一些特性,这篇笔记将做进一步的探索.主要是复制构造函数的使用. 复制构造函数 复制构造函数也称拷贝构造函数 ...
- VS2013 调试MVC源码[MVC5.2.3+MVC4Web项目]
1.目前MVC源码版本为5.2.3,下回来后用VS2013打开,把System.Web.Mvc项目的版本号改为4.0.0.1 2.在解决方案下建一个MVC4项目,.NET选4.5,修改根目录以及Vie ...
- hadoop的simple认证
目前Hadoop的稳定版本为1.2.1,我们的实验就在hadoop-1.2.1上进行 Hadoop 版本:1.2.1 OS 版本: Centos6.4 环境配置 机器名 Ip地址 功能 用户 Hado ...
- Arduino uno R3 ISP刷Rootloader for arduino pro mini
找了好久才发现的,好东西.介绍怎么使用uno对mini 刷Rootloader **SOLUTION** Reinstall the Arduino Pro Mini Bootloader using ...
- jquery让一个点击事件刷新页面就自己执行一次的方法
$('name')这个元素之前已经绑定过事件啦,(on绑定)然后直接调用下即可: $('name').click();
- http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-open-and-save-it-using-dsoframer.aspx
http://blogs.msdn.com/b/pranavwagh/archive/2007/03/03/word-2007-file-seems-to-be-deleted-when-you-op ...
- STM32F407存储器和总线架构
http://www.cnblogs.com/ransn/p/5654068.html
- hdu 1260 Tickets
http://acm.hdu.edu.cn/showproblem.php?pid=1260 题目大意:n个人买票,每个人买票都花费时间,相邻的两个人可以一起买票以节约时间: 所以一个人可以自己买票也 ...
- windows服务安装及卸载
1)安装脚本Install.bat%SystemRoot%\Microsoft.NET\Framework\v4.0.30319\installutil.exe JobSchedule.exeNet ...