当前位置:   article > 正文

Kotlin flow 实现计时器工具类_kotin 计时器 flow

kotin 计时器 flow
  1. class FlowCountDownTimer constructor(private var time: Int) {
  2. constructor(
  3. time: Int,
  4. callBack: (time: Int) -> Unit,
  5. onFinish: (time: Int) -> Unit
  6. ) : this(time) {
  7. mTime = time
  8. mCallBack = callBack
  9. mOnFinish = onFinish
  10. }
  11. //总时间
  12. private var mTime: Int = time
  13. //已走事件
  14. private var tTime = 0
  15. private var mCallBack: (time: Int) -> Unit? = {}
  16. private var mOnFinish: (time: Int) -> Unit? = {}
  17. private var finish = true//计时器是否已结束
  18. private var clean = true //计时状态 是否为清除
  19. private val intFlow = flow {
  20. finish = false
  21. while (!clean && tTime < mTime) {//当前为计时状态,且时间未执行完毕
  22. tTime++
  23. emit(mTime - tTime)//发送事件到下一步
  24. delay(1000)
  25. }
  26. }.flowOn(Dispatchers.Main)//定义处理事件的线程
  27. .onEach { mCallBack.invoke(it) }//接收事件
  28. .onCompletion { cause -> //结束事件判断
  29. if (cause == null) {
  30. clean = true
  31. finish = true
  32. mOnFinish.invoke(0)
  33. }
  34. }
  35. /**
  36. * 开始倒计时
  37. * @param time 倒计时时长
  38. * @param callBack 倒计时反馈
  39. * @param onFinish 结束事件
  40. */
  41. //开始计时,判断当前是否存在计时未走完,存在则更新,不存在则启动
  42. fun start(
  43. time: Int = this.time,
  44. callBack: (time: Int) -> Unit,
  45. onFinish: (time: Int) -> Unit
  46. ) {
  47. clean = false
  48. tTime = 0
  49. mTime = time
  50. mCallBack = callBack
  51. mOnFinish = onFinish
  52. if (finish) {
  53. //开始发送事件,设置执行线程
  54. intFlow.launchIn(CoroutineScope(Dispatchers.Main))
  55. }
  56. }
  57. //开始计时,判断当前是否存在计时未走完,存在则更新,不存在则启动
  58. fun start() {
  59. clean = false
  60. tTime = 0
  61. if (finish) {
  62. mTime = time
  63. intFlow.launchIn(CoroutineScope(Dispatchers.Main)) //保证在一个协程中执行
  64. }
  65. }
  66. /**
  67. * 清除倒计时
  68. */
  69. fun cancel() {
  70. tTime = 0 //清除已走时间
  71. clean = true//停止时间标识设为停止
  72. }
  73. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/809030
推荐阅读
相关标签
  

闽ICP备14008679号