嘿!各位老铁,大家好啊,好久没更新了,主要也不知道写些什么,也不知道别的博主是如何创作的,但对于我来说,原创的日更真的很难,不过老铁们,莫担心,做不到日更,但断断续续的更还是能做到的,也希望自己的一些粗浅的见识,能够给大家带来些许帮助,今天呢,给大家带来的是一个非常好用的计时工具,真的非常好用,用过之后,你会发现,延时和定时,真的从未如此简单。
在讲述之前,不知道各位老铁在平常的开发中,遇到定时和延时相关的功能,都是怎么解决的,古老的Handler还是Timer,无论哪种方式,虽然都能够实现我们想要的效果,但似乎都存在着一定的代码量和生命周期的考虑,有没有一种方式,既调用简单,又能不关注生命周期呢?
了解作者的老铁都知道,曾经的作者在Web的海洋里也翱翔了许久,深刻的知道Js里的定时和延时,是那么的简单,我这里贴出来,大家可以看一看。
setTimeout(function (){ //延时3秒后操作 },3000) setInterval(function (){ //定时,一秒执行一次 },1000)
Js中的延时和定时,老铁们,看后怎么样,简单吧,在Android中,我们能否也像前端这样操作呢,一个字,能,必须能。
通过对Kotlin中coroutines里的ticker再次封装,使用LifecycleOwner与生命周期进行绑定,一个简单的计时工具就诞生了。目前已经开源,需要的老铁可以下载。
地址如下:
https://github.com/AbnerMing888/VipTime
下面讲一下具体的使用方式,老铁们也感受下封装的是否简单,目前已经上传了远程Maven,大家可以依赖使用。
1、在你的跟项目下的build.gradle文件下,引入maven。
allprojects { repositories { maven { url"https://gitee.com/AbnerAndroid/almighty/raw/master" } } }
2、在你需要使用的Module中build.gradle文件下,引入依赖。
dependencies { implementation'com.vip:time:1.0.0'}
依赖引入之后,我们就可以实际的操作了,来,小试牛刀一把,和前端调用基本类似,比如一个常见的倒计时,我们就可以如下操作。
setTimeOut(5) { //倒计时完成}
没看错,调用就是这么简单,参数为需要倒计时的时间,Long类型,是不是用法可以和Web前端相媲美,这个方法,在倒计时中,没有返回倒计时的时间值,只会在定义的时间后进行返回。
有的老铁问了,在倒计时的时候,我需要拿到返回的时间值,怎么搞?必须能搞,大家可以使用下面的方法,参数呢,有两个,第一个参数为倒计时或者延时的时长,第二个参数是间隔时长,默认不填是间隔1秒,通过是否等于end,来判断是否倒计时完成。
setTimeDown(5) { if (it==end) { //倒计时完成 } else { valt=it.toString()//倒计时 时间值 } }
同样的,定时也是非常的简单,比如我想要实现一个无限定时器,就可以通过下面的方法,参数只有一个,就是时间间隔,也就是多少秒轮询一次。
setIntervalWireless(1) { valt=it.toString()//定时 时间值 }
有的老铁问了,实际的业务中,除了无限的定时之外,还有一些是有限的定时,比如1分钟或者10分钟,这种有限的时间内采取定时,如何操作呢?也是非常的简单,可以使用下面的方式,两个参数,参数1为定时需要的时间, 参数2是时间间隔,多久轮询一次。
setInterval(10, 2) { if (it == end) { //定时完成 } else { val t = it.toString()//定时 时间值 } }
提供的这四个方法,基本上可以满足实际的业务需求,可以在Activity或者Fragment里直接调用,因为要和生命周期进行绑定,如果在View或者工具类里进行使用,可以把context转为Activity后再进行调用即可。
这篇没有特别难的,就到这里吧。