旗袍网站架构,承德建设网站,html5教育网站,中国建设银行英语网站满足延迟执行、立即执行#xff0c;每次任务间隔时长#xff0c;总时长的任务
使用1
class TimeViewModel:Viewmodel(){//测试延迟5秒开始执行任务#xff0c;然后每隔1秒执行1次#xff0c;总执行时间60秒fun testTime(){var startTime System.currentTimeMillis()log(…满足延迟执行、立即执行每次任务间隔时长总时长的任务
使用1
class TimeViewModel:Viewmodel(){//测试延迟5秒开始执行任务然后每隔1秒执行1次总执行时间60秒fun testTime(){var startTime System.currentTimeMillis()log(执行 开始 startTime${startTime})val job viewModelScope.startTime(interval 5000,duration 1000,totalTime 60*1000,onNext {count-log(执行次数${count})},onFinish {log(执行结束)log(执行 结束 总耗时${System.currentTimeMillis() - startTime})})viewModelScope.launch {delay(20000)log(模拟执行手动结束)job.cancel()}}}使用2 //立即执行任务然后每隔1秒执行1次总执行时间60秒
val job viewModelScope.startTime(duration 1000,totalTime 60*1000,onNext {count-log(执行次数${count})},onFinish {log(执行结束)log(执行 结束 总耗时${System.currentTimeMillis() - startTime})}) 使用3 /*立即执行任务然后每间隔1秒执行1次要么手动调用 job.cancel()要么等所在协程生命周期结束才会结束但不会回调 onFinish
*/val job viewModelScope.startTime(duration 1000,onNext {count-log(执行次数${count})},onFinish {log(执行结束)log(执行 结束 总耗时${System.currentTimeMillis() - startTime})})
使用4 /*延迟5秒再执行任务然后每间隔1秒执行1次要么手动调用 job.cancel()要么等所在协程生命周期结束才会结束但不会回调 onFinish
*/ val job viewModelScope.startTime(interval 5000,duration 1000,onNext {count-log(执行次数${count})},onFinish {log(执行结束)log(执行 结束 总耗时${System.currentTimeMillis() - startTime})}) //代码封装
/*** param interval 单位毫秒用于定时器延迟时间开启例如interval 5000则是5秒后才会开始倒计时* param duration 单位毫秒用户每次定时任务间隔时长执行1次例如 duration 1000则每间隔1秒执行1次* param totalTime 单位毫秒,用于定时器执行的总时长* 如果为空的话会一直在运行直到手动调用cancel 方法或者所在协程声明周期结束 而结束* onNext(count) ,返回每次执行的次数* onFinish() 任务正常执行完成*/fun CoroutineScope.startTime(interval:Long? 0,duration:Long,totalTime:Long? null,onNext:(Int)-Unit,onFinish:(()-Unit)? null):Job{if (duration0){throw IllegalArgumentException(间隔时间必须大于0)}return this.launch {interval?.let { _interval-if (_interval0){delay(_interval)}}var isStart truevar runAllTotalTime:Long 0var count 0while (isStart){if (totalTime! null totalTime0 runAllTotalTime totalTime){isStart falseonFinish?.invoke()}else{delay(duration)runAllTotalTimedurationcount1onNext.invoke(count)}}}}