贼简单的Android计时工具,老铁,还不试用起来

举报
二流小码农 发表于 2023/07/19 15:11:39 2023/07/19
【摘要】 不知道各位老铁在平常的开发中,遇到定时和延时相关的功能,都是怎么解决的,古老的Handler还是Timer,无论哪种方式,虽然都能够实现我们想要的效果,但似乎都存在着一定的代码量和生命周期的考虑,有没有一种方式,既调用简单,又能不关注生命周期呢?

嘿!各位老铁,大家好啊,好久没更新了,主要也不知道写些什么,也不知道别的博主是如何创作的,但对于我来说,原创的日更真的很难,不过老铁们,莫担心,做不到日更,但断断续续的更还是能做到的,也希望自己的一些粗浅的见识,能够给大家带来些许帮助,今天呢,给大家带来的是一个非常好用的计时工具,真的非常好用,用过之后,你会发现,延时和定时,真的从未如此简单。


在讲述之前,不知道各位老铁在平常的开发中,遇到定时和延时相关的功能,都是怎么解决的,古老的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 {
        val t= it.toString()//倒计时 时间值
    }
}


同样的,定时也是非常的简单,比如我想要实现一个无限定时器,就可以通过下面的方法,参数只有一个,就是时间间隔,也就是多少秒轮询一次。


setIntervalWireless(1) {
      val t = it.toString()//定时 时间值
   }


有的老铁问了,实际的业务中,除了无限的定时之外,还有一些是有限的定时,比如1分钟或者10分钟,这种有限的时间内采取定时,如何操作呢?也是非常的简单,可以使用下面的方式,两个参数,参数1为定时需要的时间, 参数2是时间间隔,多久轮询一次。


setInterval(10, 2) {
  if (it == end) {
         //定时完成
    } else {
       val t = it.toString()//定时 时间值
    }
}


提供的这四个方法,基本上可以满足实际的业务需求,可以在Activity或者Fragment里直接调用,因为要和生命周期进行绑定,如果在View或者工具类里进行使用,可以把context转为Activity后再进行调用即可。


这篇没有特别难的,就到这里吧。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。