Android实现调度任务的三种方式:TimerTask、ScheduledExecutorService、Handler
来源:互联网 发布:土方工程量计算软件 编辑:程序博客网 时间:2024/05/22 12:03
Android实现调度任务的三种方式:
1,Timer和TimerTask;
2,调度线程池:ScheduledExecutorService;
3,Handler消息机制;
一,Timer和TimerTask的使用:
//在一个Dialog中实现倒计时;private Activity mContext;private Timer timer;private TimerTask task;private int count = counter.length;private static int[] counter = { R.drawable.counter_1, R.drawable.counter_2, R.drawable.counter_3 }; @Overrideprotected void onStart() {super.onStart();timer = new Timer();task = new TimerTask() {@Overridepublic void run() {--count;if (count <= 0) {cancel();dismiss();} else {mContext.runOnUiThread(new Runnable() {@Overridepublic void run() {tv_timer.setBackgroundResource(counter[count - 1]);}});}}}; timer.schedule(task, 1000, 1000);} @Overridepublic void dismiss() {super.dismiss();if(timer!=null){timer.cancel();timer=null;}if(task!=null){task.cancel();task=null;}}
二.ScheduledExecutorService的使用:
//点击按钮执行一个倒计时;/** * 是否正在倒计时; */private boolean countDowning;private int pointer = 120;private Runnable runnable1 = new Runnable() {public void run() {sendRemind.setText("发送提醒(" + pointer + "s)");}}; private Runnable runnable2 = new Runnable() {public void run() {sendRemind.setText(getText(R.string.send_remind));}}; private Runnable task = new Runnable() { @Overridepublic void run() {if (pointer > 0) {runOnUiThread(runnable1);--pointer;} else {executor.shutdown();countDowning = false;runOnUiThread(runnable2);pointer = 120;}}}; private ScheduledExecutorService executor = Executors.newScheduledThreadPool(1); @Overridepublic void onClick(View v) {switch (v.getId()) { case R.id.sendRemind:if (!countDowning) {countDowning = true;executor.scheduleAtFixedRate(task, 0, 1000, TimeUnit.MILLISECONDS);}break;}}
三,Handler的使用:
/点击按钮执行一个倒计时;/** * 是否正在倒计时; */private boolean countDowning;private int pointer = 120; private static final int COUNT_DOWN = 2222;private Handler mHandler = new Handler() { public void handleMessage(android.os.Message msg) {switch (msg.what) {case COUNT_DOWN:if (pointer > 0) {sendRemind.setText("发送提醒(" + pointer + "s)");--pointer;mHandler.sendEmptyMessageDelayed(COUNT_DOWN, 1000L);} else {mHandler.removeCallbacksAndMessages(null);countDowning = false;sendRemind.setText(getText(R.string.send_remind));pointer = 120;}break; }};}; @Overridepublic void onClick(View v) {switch (v.getId()) {case R.id.sendRemind:if (!countDowning) {countDowning = true;// executor.scheduleAtFixedRate(task, 0, 1000,// TimeUnit.MILLISECONDS);mHandler.sendEmptyMessage(COUNT_DOWN);}break;}}
简单小结:
1,使用Timer和TimerTask有时候并不能立即暂停或者取消调度任务,它总是还会继续执行一次才真正停止;
2,TimerTask和ScheduledExecutorService是新开了线程,这样就额外耗费了性能,而且在子线程中执行调度任务的时候修改UI比较麻烦;
3,使用Handler直接借用了系统的消息机制功能,本身就有MessageQueue和Looper,不用白不用,而且本身就在UI线程中,修改UI很方便。
0 0
- Android实现调度任务的三种方式:TimerTask、ScheduledExecutorService、Handler
- 任务调度的 Java 实现方法一:Timer、TimerTask、 ScheduledExecutorService
- JAVA的三种任务调度,Timmer,ScheduledExecutorService和Quartz
- 用ScheduledExecutorService实现任务调度
- Spring定时任务的实现方式--ScheduledExecutorService
- spring的三种任务调度实现方式
- 任务调度(三)——Timer的替代品ScheduledExecutorService简介
- Android实现 再按一次退出 的三种方法 durationTime、timerTask 和Handler
- Android 定时器的实现方式(TimerTask、Handler)及 Handler使用解析
- Android 定时器的实现方式(TimerTask、Handler)及 Handler使用解析
- Android使用Handler与timer及TimerTask结合的方法来实现后台运行定时任务
- Spring实现后台的任务调度TimerTask和Quartz
- 任务调度ScheduledExecutorService
- Spring整合TimerTask实现定时任务调度
- Spring整合TimerTask实现定时任务调度
- Android中实现异步任务机制的方式:Handler、AsyncTask
- Spring定时任务的实现方式--Timer和TimerTask
- spring4.2.5实现调度任务的几种方式
- 一台电脑如何管理多个SSH KEY
- 21个数据科学家面试必须知道的问题和答案
- Rhino -- 基于java的javascript实现
- 使用UICollectionView制作滑动viewpage
- OVS网桥建立和连接管理
- Android实现调度任务的三种方式:TimerTask、ScheduledExecutorService、Handler
- java Android 中的字符串比较和double类型转换为两位小数点
- Android TextView系列--第一篇
- svn最终搭建
- 图片加载框架Glide使用详解
- Mysql分段统计简单数据信息例如年龄,省份,性别等等
- Linux常用命令大全
- Linq not in 查询
- Spring 注解