object PushDebounce {
private var latestParam: Any? = null
private var throttleJob: Job? = null
private var timeMillis: Long = -1
private val LOG_TAG = this.javaClass.simpleName
fun throttleLatest(intervalMs: Long = 300L,
param :Any?,
destinationFunction: (Any?) -> Unit){
LogUtils.info(LOG_TAG, "throttleLatest sennnd -> param = ${param}")
if(System.currentTimeMillis() - timeMillis > 2000){
//保证一次被执行
LogUtils.info(LOG_TAG, "throttleLatest result -> param = ${param}")
param.let(destinationFunction)
}
latestParam = param
timeMillis = System.currentTimeMillis()
if (throttleJob?.isCompleted != false) {
throttleJob = GlobalScope.launch(Dispatchers.IO) {
delay(intervalMs)
//间隔结束后,最新数据被执行
GlobalScope.launch(Dispatchers.Main){
LogUtils.info(LOG_TAG, "throttleLatest result -> lates = ${latestParam}")
latestParam.let(destinationFunction)
}
}
}
}
}
Kotlin去抖动-频率限制
于 2023-08-14 09:37:45 首次发布