|
@@ -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() }
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
|