Handler Timer TimerTask ScheduledExecutor 循环任务解析
使用Handler执行循环任务
private Handler handler = new Handler();
private int mDelayTime = 1000;
private Runnable runnable = new Runnable() {
@Override
public void run() {
if (mDelayTime > 0) {
Log.d(TAG, "run::time=" + mDelayTime);
handler.postDelayed(runnable, mDelayTime);
mDelayTime--;
}
}
};
handler.postDelayed(runnable, 1000);
Handler可以重复执行某个任务;Timer若在取消执行某个任务后,再次执行时会抛出IllegalStateException异常.需要再次创建一个Timer对象.
Handler可以调整循环执行的周期;而Timer需要消耗较大资源才能做到.
UI更新时,在创建Handler时可以指定所在的线程,一般在主线程中创建,更容易更新UI.
Handler的内存占比更低.
使用Timer和TimerTask执行定时或者循环任务
特定:当启动和取消任务时,可控制任务的执行;
第一次执行任务时,可以指定延迟时间;
Timer类用于任务的调度,TimerTask中的run()实现具体的任务;
Timer实例可以调度多任务,且是线程安全的;
Timer在构造时,创建了一个工作线程(子线程),该线程用于执行具体任务;
import java.util.TimerTask;
public class Task2 {
public static void main(String[] args) {
TimerTask task = new TimerTask() {
@Override
public void run() {
System.out.println("Hello !!!");
}
};
Timer timer = new Timer();
long delay = 0;
long intevalPeriod = 1 * 1000;
// schedules the task to be run in an interval
timer.scheduleAtFixedRate(task, delay,intevalPeriod);
} // end of main
}
ScheduledExecutorService执行定时或循环任务
ScheduledExecutorService类作为并发工具类被引入,是最理想的定时任务实现方式;
相比于Timer的单线程,上述方法通过线程池的方式来执行任务;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class Task3 {
public static void main(String[] args) {
Runnable runnable = new Runnable() {
public void run() {
System.out.println("Hello !!");
}
};
ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();
service.scheduleAtFixedRate(runnable, 0, 1, TimeUnit.SECONDS);
}
}
Handler Timer TimerTask ScheduledExecutor 循环任务解析的更多相关文章
- android 定时器(Handler Timer Thread AlarmManager CountDownTimer)
Android实现定时任务一般会使用以上(Handler Timer Thread AlarmManager CountDownTimer)五种方式.当然还有很多组合使用(比如Handler+Thre ...
- Timer&TimerTask原理分析
转载地址,请珍惜作者的劳动成果,转载请注明出处:http://www.open-open.com/lib/view/open1337176725619.html 如果你使用Java语言进行开发,对于定 ...
- JDK Timer & TimerTask
目录 Timer & TimerTask Binary Heap Insert DELETE MIN PERFORMANCE LifeCycle Constructor MainLoop sc ...
- 线程 Timer TimerTask 计时器 定时任务 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- [转]Handler MessageQueue Looper消息循环原理分析
Handler MessageQueue Looper消息循环原理分析 Handler概述 Handler在Android开发中非常重要,最常见的使用场景就是在子线程需要更新UI,用Handler ...
- 使用Handler和Timer+Timertask实现简单的图片轮播
布局文件就只放了一个简单的ImageView,就不展示了. 下面是Activity package com.example.administrator.handlerthreadmessagedemo ...
- Android Handler机制(三)----Looper源码解析
一.Looper Looper对象,顾名思义,直译过来就是循环的意思,从MessageQueue中不断取出message. Class used to run a message loop for a ...
- Android Handler机制(二)---MessageQueue源码解析
MessageQueue 1.变量 private final boolean mQuitAllowed;//表示MessageQueue是否允许退出 @SuppressWarnings(" ...
- viewPager+Handler+Timer简单实现广告轮播效果
基本思想是在Avtivity中放一个ViewPager,然后通过监听去实现联动效果,代码理由详细的解释,我就不说了. MainActivity.java package com.example.adm ...
随机推荐
- vmware彻底隐藏控制栏白条
vmware全屏模式都会在屏幕顶端留一条细细的条. 选择查看,里面有个独占模式.选中该模式,就可以达到完全全屏的效果. 但是进入独占模式后,无法再在多个系统间来回切换,使用ctrl+alt可以切换回正 ...
- c语言int型和char型的自动类型转换
; //机器码为0xff unsigned ; //机器码0xfe if (a <= b){ printf("a <= b\n"); } else{ printf(&q ...
- Leetcode#500. Keyboard Row(键盘行)
题目描述 给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词.键盘如下图所示. 示例1: 输入: ["Hello", "Alaska", &quo ...
- python3字符串
Python3 字符串 Python字符串运算符 + 字符串连接 a + b 输出结果: HelloPython * 重复输出字符串 a*2 输出结果:HelloHello [] 通过索引获取字符串中 ...
- 团队Github实战训练
班级:软件工程1916|W 作业:团队Github实战训练 团队名称:SkyReach Github地址:Github地址 贡献比例表 队员学号 队员姓名 此次活动任务 贡献比例 221600106 ...
- css悬浮提示框
效果图: code: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- Linux中普通用户配置sudo权限(带密或免密)
配置步骤如下: 1.登陆或切换到root用户下: 2.添加sudo文件的写权限,命令是:chmod u+w /etc/sudoers 3.编辑sudoers文件:vi /etc/sudoers 找到这 ...
- .Net Core----关于MVC中TempData持久化问题
最近在做mvc跨控制器传值的时候发现一个问题,就是有时候TempData的值为null,然后查阅了许多资料,发现了许多都是逻辑和原理什么的(想看原理可以查看原理的文章,本文是用法),但是真正解决的办法 ...
- Jenkins的配置从节点中默认没有Launch agent via Java Web Start选项问题
Jenkins的配置从节点中默认没有Launch agent via Java Web Start,如下图所示,而这种启动方式在Windows上是最方便的. 如何设置才能让出来呢? 1:打开" ...
- vertx的NetServer模块
启动 public synchronized void listen(Handler<NetSocket> handler, SocketAddress socketAddress, Ha ...