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


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

    在讲述之前,不知道各位老铁在平常的开发中,遇到定时和延时相关的功能,都是怎么解决的,古老的Handler还是Timer,无论哪种方式,虽然都能够实现我们想要的效果,但似乎都存在着一定的代码量和生命周期的考虑,有没有一种方式,既调用简单,又能不关注生命周期呢?

    了解作者的老铁都知道,曾经的作者在Web的海洋里也翱翔了许久,深刻的知道Js里的定时和延时,是那么的简单,我这里贴出来,大家可以看一看。

    1. setTimeout(function (){
    2. //延时3秒后操作
    3. },3000)
    4. setInterval(function (){
    5. //定时,一秒执行一次
    6. },1000)

    Js中的延时和定时,老铁们,看后怎么样,简单吧,在Android中,我们能否也像前端这样操作呢,一个字,能,必须能。

    通过对Kotlin中coroutines里的ticker再次封装,使用LifecycleOwner与生命周期进行绑定,一个简单的计时工具就诞生了。目前已经开源,需要的老铁可以下载。

    地址如下:

    https://github.com/AbnerMing888/VipTime

    下面讲一下具体的使用方式,老铁们也感受下封装的是否简单,目前已经上传了远程Maven,大家可以依赖使用。

    1、在你的跟项目下的build.gradle文件下,引入maven。

    1. allprojects {
    2. repositories {
    3. maven { url "https://gitee.com/AbnerAndroid/almighty/raw/master" }
    4. }
    5. }

    2、在你需要使用的Module中build.gradle文件下,引入依赖。

    1. dependencies {
    2. implementation 'com.vip:time:1.0.0'
    3. }

    依赖引入之后,我们就可以实际的操作了,来,小试牛刀一把,和前端调用基本类似,比如一个常见的倒计时,我们就可以如下操作。

    1. setTimeOut(5) {
    2.      //倒计时完成
    3. }

    没看错,调用就是这么简单,参数为需要倒计时的时间,Long类型,是不是用法可以和Web前端相媲美,这个方法,在倒计时中,没有返回倒计时的时间值,只会在定义的时间后进行返回。

    有的老铁问了,在倒计时的时候,我需要拿到返回的时间值,怎么搞?必须能搞,大家可以使用下面的方法,参数呢,有两个,第一个参数为倒计时或者延时的时长,第二个参数是间隔时长,默认不填是间隔1秒,通过是否等于end,来判断是否倒计时完成。

    1. setTimeDown(5) {
    2. if (it == end) {
    3. //倒计时完成
    4. } else {
    5. val t= it.toString()//倒计时 时间值
    6. }
    7. }

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

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

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

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

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

    这篇没有特别难的,就到这里吧,下篇文章介绍一下,封装的另一个库,MVVM的Base库,大家敬请期待!

  • 相关阅读:
    威马汽车欲曲线上市:沈晖已提前持股并任职,销量垫底、员工降薪
    [论文评析-CV]MediaPipe: A Framework for Building Perception Pipelines, ArXiv,2019
    考研西电(833),考什么?计算机组成原理第一章要点
    Dynamic Mapping
    基于SqlSugar的开发框架循序渐进介绍(3)-- 实现代码生成工具Database2Sharp的整合开发
    收藏了!Git 核心操作图解
    c++字符串相关接口
    机器学习——决策树
    【AGC】典型问题8月第一期
    python-wordcloud词云
  • 原文地址:https://blog.csdn.net/ming_147/article/details/126656328