我是靠谱客的博主 娇气服饰,这篇文章主要介绍用 Handler 轻松实现专属Android定时器,现在分享给大家,希望可以做个参考。

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

Handler handler = new Handler();
int countDown = 30;
Runnable r = new Runnable() {
@Override
public 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)
//tag
tag(String tag)
//任务执行完成CallBack
accept(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>() {
@Override
public void accept(Long aLong) throws Exception {
updateCancelLaunchButton(aLong);
}
}, new Action() {
@Override
public void run() throws Exception {
performLaunchButtonClick();
}
}).start();

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

AndroidDeveloperTools

最后

以上就是娇气服饰最近收集整理的关于用 Handler 轻松实现专属Android定时器的全部内容,更多相关内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(69)

评论列表共有 0 条评论

立即
投稿
返回
顶部