Browse Source

pref: Interval

drake 2 years ago
parent
commit
ad210b69d0
1 changed files with 15 additions and 3 deletions
  1. 15 3
      net/src/main/java/com/drake/net/time/Interval.kt

+ 15 - 3
net/src/main/java/com/drake/net/time/Interval.kt

@@ -18,11 +18,12 @@
 
 package com.drake.net.time
 
+import android.os.Handler
+import android.os.Looper
 import androidx.fragment.app.Fragment
 import androidx.lifecycle.Lifecycle
 import androidx.lifecycle.LifecycleEventObserver
 import androidx.lifecycle.LifecycleOwner
-import com.drake.net.utils.runMain
 import kotlinx.coroutines.*
 import kotlinx.coroutines.channels.ReceiveChannel
 import kotlinx.coroutines.channels.TickerMode
@@ -32,7 +33,7 @@ import java.io.Serializable
 import java.util.concurrent.TimeUnit
 
 /**
- * 创建一个会自动结束的轮询器
+ * 创建一个轮询器
  *
  * 操作
  * 1. 开启 [start] 只有在闲置状态下才可以开始
@@ -53,7 +54,7 @@ import java.util.concurrent.TimeUnit
  * @param initialDelay 第一次事件的间隔时间, 默认0
  * @param start 开始值, 当[start]]比[end]值大, 且end不等于-1时, 即为倒计时, 反之正计时
  */
-open class Interval(
+open class Interval @JvmOverloads constructor(
     var end: Long,
     private val period: Long,
     private val unit: TimeUnit,
@@ -68,6 +69,7 @@ open class Interval(
      * @param unit 时间单位
      * @param initialDelay 初次间隔时间, 默认为0即立即开始
      */
+    @JvmOverloads
     constructor(
         period: Long,
         unit: TimeUnit,
@@ -198,6 +200,7 @@ open class Interval(
      * @param lifecycleOwner 生命周期持有者, 一般为Activity/Fragment
      * @param lifeEvent 销毁生命周期, 默认为 [Lifecycle.Event.ON_DESTROY] 时停止时停止轮询器
      */
+    @JvmOverloads
     fun life(
         lifecycleOwner: LifecycleOwner,
         lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_DESTROY
@@ -215,6 +218,7 @@ open class Interval(
      * 自动在指定生命周期后取消[cancel]轮询器
      * @param lifeEvent 销毁生命周期, 默认为 [Lifecycle.Event.ON_DESTROY] 时停止时停止轮询器
      */
+    @JvmOverloads
     fun life(
         fragment: Fragment,
         lifeEvent: Lifecycle.Event = Lifecycle.Event.ON_DESTROY
@@ -262,5 +266,13 @@ open class Interval(
             }
         }
     }
+
+    private fun runMain(block: () -> Unit) {
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            block()
+        } else {
+            Handler(Looper.getMainLooper()).post { block() }
+        }
+    }
 }