RxJava实现验证码倒计时

之前写发送验证码倒计时功能时都是自定义的CountdownView,最近想用RxJava实现以下,就当做个简单得小记录!

```

private fun initSendMsg() {

    val timer:TextView = findViewById(R.id.sendCode)

    var mSubscription:Subscription?= null // Subscription 对象,用于取消订阅关系,防止内存泄露

//开始倒计时,用 RxJava2 实现

    val count = 59L

    Flowable.interval(0, 1, TimeUnit.SECONDS) //设置0延迟,每隔一秒发送一条数据

            .onBackpressureBuffer() //加上背压策略

            .take(count) // 设置循环次数

            .map { aLong ->

                count - aLong

            }

            .observeOn(AndroidSchedulers.mainThread())

            .subscribe(object :Subscriber<Long> {

                override fun onComplete() {

                    timer.text = "点击重发"

                    timer.isEnabled = true

                    timer.setTextColor(Color.parseColor("#FFF5721E"))

                    mSubscription?.cancel() //取消订阅,防止内存泄漏

                }

                override fun onNext(t:Long?) {

                    timer.text = "${t}s" //接受到一条就是会操作一次UI

                    timer.setTextColor(Color.parseColor("#FF333333"))

}

                override fun onError(t:Throwable?) {

                    t?.printStackTrace()

}

                override fun onSubscribe(s:Subscription?) {

                    timer.isEnabled = false //在发送数据的时候设置为不能点击

                    timer.setTextColor(Color.parseColor("#0cFFFFFF")) //背景色设为灰色

                    mSubscription = s

                    s?.request(Long.MAX_VALUE) //设置请求事件的数量,重要,必须调用

                }

})

}

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容