用 Handler 轻松实现专属Android定时器
今年在项目中发现为了实现倒计时、时间段的延迟执行、时间段的轮询执行任务,都是采用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);
复制代码
上面的代码还算好,如果是以 handleMessage
、sendEmptyMessageDelayed
再通过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定时器相关推荐
- android计时器handler,用 Handler 轻松实现专属Android定时器
今年在项目中发现为了实现倒计时.时间段的延迟执行.时间段的轮询执行任务,都是采用Handler postDelayed(runnable,delayMillis). 等等,这有毛病?那你将实现以上功能 ...
- android studio 定时器,Android定时器和Handler用法实例分析
本文实例讲述了Android定时器和Handler用法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Android Studio 二.定时器使用示例: 初始化: //定 ...
- android实现10ms定时器,本文实例讲述了Android定时器和Handler用法。分享给大家供大家参考。具体分析如下:一、环境:主机:WIN8开发环境:Android Studio...
本文实例讲述了Android定时器和Handler用法.分享给大家供大家参考.具体分析如下: 一.环境: 主机:WIN8 开发环境:Android Studio 二.定时器使用示例: 初始化: //定 ...
- android 定时器 耗电,Android定时器
CountDownTimer new CountDownTimer(3000, 1000) { public void onTick(long millisUntilFinished) { if (m ...
- 【转】 Android定时器
转载自:http://www.android-study.com/pingtaikaifa/508.html 在Android开发中,定时器一般有以下3种实现方法: 一.采用Handler与线程的sl ...
- android 定时换图片,Android 定时器实现图片的变换
Android 定时器实现图片的变换 在Android中,要让每秒进行一次ui更新,就需要利用到定时器和handler,message的结合,如果不使用handler就不能达到更新ui的效果,我的理解 ...
- Android 定时器+倒计时 仿淘宝秒杀
目录结构 效果图: imageViewHolder public class imageViewHolder extends RecyclerView.ViewHolder {public Image ...
- Android定时器Timer和TimerTas的使用
1. 概述 Timer是一种定时器工具,用来在一个后台线程计划执行指定任务.它可以计划执行一个任务一次或反复多次. TimerTask一个抽象类,它的子类代表一个可以被Timer计划的任务. Time ...
- android定时器取消,Android定时器崩溃取消
我有一个定时器运行,然后熄灭,并做了一些事情,定时器启动罚款.Android定时器崩溃取消 然后我想要做的是点击一个按钮,然后创建一个电子邮件.除了在计时器运行时单击该按钮之外,一切正常,应用程序崩溃 ...
最新文章
- PL/SQL中的数据类型隐式转换规则
- 4936: 特殊排序
- 对弈程序基本技术----Alpha-Beta搜索
- python遍历文件内容_Python四种逐行读取文件内容的方法
- 有关技术管理的一些思考
- JAVA编码(27)——执行批量导入Excel文件并进行解析
- [Hbase]Hbase常用的优化方法
- ai带来的革命_AI革命就在这里。 这与我们预期的不同。
- 计算机图形学完整笔记(四):消隐
- 数学知识在计算机专业的运用,数学在计算机科学及应用中的作用分析
- 从零搭建个人深度学习服务器|SSH远程登录|外网访问|手动指定ip|端口转发
- 微信的那个老外产品经理,又写了一篇《中国移动应用设计趋势》
- Python ---------列表 集合 字典 深浅拷贝
- 实现isodd() 参数为整数,如果整数为基数,返回True 否则返回False
- 鲁卡斯队列求黄金分割数
- 微信支付v3生成签名
- 热门的智慧养老产品有哪些?解读新政策后的超全资料整合
- 计算机按键音乐文爱,CG/贺敬轩《文爱》[FLAC/MP3-320K]
- 2017年7月14日 星期五 --出埃及记 Exodus 28:5
- 从运维技术架构变化初探运维组织转型