RxJava实现验证码倒计时

2019-04-18  本文已影响0人  戏子戏戏子

之前写发送验证码倒计时功能时都是自定义的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) //设置请求事件的数量,重要,必须调用

                }

})

}

```

上一篇下一篇

猜你喜欢

热点阅读