今年在项目中发现为了实现倒计时、时间段的延迟执行、时间段的轮询执行任务,都是采用Handler postDelayed(runnable,delayMillis). 等等,这有毛病?那你将实现以上功能时、代码大概如下。

Handler handler = new Handler();
int countDown = 30;
Runnable r = new Runnable() {@Overridepublic void run() {while (countDown>0){handler.postDelayed(r,1);countDown--;}}};
handler.postDelayed(r,0);
复制代码

上面的代码还算好,如果是以 handleMessagesendEmptyMessageDelayed 再通过removeMessages/removeCallbacks 去取消,这样的代码一大堆、追踪代码时,跳来跳去的。

这时我就想到了RxJava 的好了,难道为了这要加入RxJava?

所以, RxJava 好在哪?就好在简洁,好在那把什么复杂逻辑都只是一条链式调用。

因此把上面代码封装一个 HandlerTaskTimer 工具类,大概伪编码

class HandlerTaskTimer{//成员变量Handler uiHandler;//因为要链式调用,顺带采用构建者模式初始化必要参数Builder newBuilder()class Builder{//一段时间后执行period(long period, TimeUnit unit)/*** @param period       一段时间后执行* @param initialDelay 首次延迟执行时间* @param unit* @return*/period(long period, long initialDelay, TimeUnit unit)//首次延迟执行时间initialDelay(long period, TimeUnit unit) //takeWhile 倒计时Count  takeWhile(long takeWhile)//tagtag(String tag)//任务执行完成CallBackaccept(Action action)  //倒计时回调  accept(Consumer<Long> longConsumer)  accept(Consumer<Long> longConsumer, Action action)//倒计时模式任务countDown() //循环模式任务loopExecute() //延迟模式任务delayExecute() //启动任务start()//取消任务cancel()//恢复任务resume()//暂停任务pause()}
}复制代码

接下来就慢慢实现功能了,条条大路通罗马,也许你有更好的实现方式,以下是我本人的简单实现十分轻巧的定时任务器。

 HandlerTaskTimer.getInstance().newBuilder().tag(TAG_COUNTDOWN).period(1, TimeUnit.SECONDS).takeWhile(LauncherActivity.DELAY_LAUNCH_DEFAULT).countDown().accept(new Consumer<Long>() {@Overridepublic void accept(Long aLong) throws Exception {updateCancelLaunchButton(aLong);}}, new Action() {@Overridepublic void run() throws Exception {performLaunchButtonClick();}}).start();
复制代码

哈哈,是不是好看多了!!代码不一一列出了,参照我? GitHub上的Demo 实现,还有Kotlin 的实现呢

AndroidDeveloperTools

转载于:https://juejin.im/post/5a39319bf265da4327185b6c

用 Handler 轻松实现专属Android定时器相关推荐

  1. android计时器handler,用 Handler 轻松实现专属Android定时器

    今年在项目中发现为了实现倒计时.时间段的延迟执行.时间段的轮询执行任务,都是采用Handler postDelayed(runnable,delayMillis). 等等,这有毛病?那你将实现以上功能 ...

  2. android studio 定时器,Android定时器和Handler用法实例分析

    本文实例讲述了Android定时器和Handler用法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Android Studio 二.定时器使用示例: 初始化: //定 ...

  3. android实现10ms定时器,本文实例讲述了Android定时器和Handler用法。分享给大家供大家参考。具体分析如下:一、环境:主机:WIN8开发环境:Android Studio...

    本文实例讲述了Android定时器和Handler用法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Android Studio 二.定时器使用示例: 初始化: //定 ...

  4. android 定时器 耗电,Android定时器

    CountDownTimer new CountDownTimer(3000, 1000) { public void onTick(long millisUntilFinished) { if (m ...

  5. 【转】 Android定时器

    转载自:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sl ...

  6. android 定时换图片,Android 定时器实现图片的变换

    Android 定时器实现图片的变换 在Android中,要让每秒进行一次ui更新,就需要利用到定时器和handler,message的结合,如果不使用handler就不能达到更新ui的效果,我的理解 ...

  7. Android 定时器+倒计时 仿淘宝秒杀

    目录结构 效果图: imageViewHolder public class imageViewHolder extends RecyclerView.ViewHolder {public Image ...

  8. Android定时器Timer和TimerTas的使用

    1. 概述 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. Time ...

  9. android定时器取消,Android定时器崩溃取消

    我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款.Android定时器崩溃取消 然后我想要做的是点击一个按钮,然后创建一个电子邮件.除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃 ...

最新文章

  1. PL/SQL中的数据类型隐式转换规则
  2. 4936: 特殊排序
  3. 对弈程序基本技术----Alpha-Beta搜索
  4. python遍历文件内容_Python四种逐行读取文件内容的方法
  5. 有关技术管理的一些思考
  6. JAVA编码(27)——执行批量导入Excel文件并进行解析
  7. [Hbase]Hbase常用的优化方法
  8. ai带来的革命_AI革命就在这里。 这与我们预期的不同。
  9. 计算机图形学完整笔记(四):消隐
  10. 数学知识在计算机专业的运用,数学在计算机科学及应用中的作用分析
  11. 从零搭建个人深度学习服务器|SSH远程登录|外网访问|手动指定ip|端口转发
  12. 微信的那个老外产品经理,又写了一篇《中国移动应用设计趋势》
  13. Python ---------列表 集合 字典 深浅拷贝
  14. 实现isodd() 参数为整数,如果整数为基数,返回True 否则返回False
  15. 鲁卡斯队列求黄金分割数
  16. 微信支付v3生成签名
  17. 热门的智慧养老产品有哪些?解读新政策后的超全资料整合
  18. 计算机按键音乐文爱,CG/贺敬轩《文爱》[FLAC/MP3-320K]
  19. 2017年7月14日 星期五 --出埃及记 Exodus 28:5
  20. 从运维技术架构变化初探运维组织转型

热门文章

  1. c语言实现线性结构(数组与链表)
  2. ASP.NET WebAPi之断点续传下载(下)
  3. 有关java的一些话
  4. 【百度地图API】——如何用label制作简易的房产标签
  5. 在SQL Server 2008中配置文件流(FILESTREAM)
  6. .net3.5的安装与修复
  7. 在ASP.NET MVC下实现树形导航菜单
  8. 使用Zabbix通过BMC管理口监控HP服务器
  9. 2014-5-14 我的战斗效果
  10. 固态硬盘驱动器在设计上有个安全漏洞 易导致数据损毁