概述
今天在做需求在androidServer里做一个通知,本来想的用timerTask{}+协程来做,结果发现一直不执行代码,debug到此处也莫名奇妙跳过。之后发现问题,但是没解决,总结如下:
service代码
val scheduledThreadPool = Executors.newScheduledThreadPool(2)//一个线程的并行任务线程池 。。
override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
startTimer()
return START_REDELIVER_INTENT
}
/**
* 开启定时器 轮训执行任务
*/
private fun startTimer(){
val task2 = object:TimerTask(){
override fun run() {
Log.i(TAG,"协程前 task2" )
coroutine(//耗时cao
{NetWorkOperating().initHttpUrlConnection(centerHospitalUidParameter, NetWorkOperating.GET_UN_REPORT_COUNT)}
){
Log.i(TAG,"我再执行 $unReportQuantity task2" )
}
}
}
val task = timerTask {
Log.i(TAG,"协程前 task" )
//获取未查阅报告数量
coroutine(//耗时操作
{NetWorkOperating().initHttpUrlConnection(centerHospitalUidParameter, NetWorkOperating.GET_UN_REPORT_COUNT)}
){
Log.i(TAG,"我再执行 $unReportQuantity task1" )
}
}
scheduledThreadPool.scheduleWithFixedDelay(task2,1000,10000,TimeUnit.MILLISECONDS)
scheduledThreadPool.scheduleWithFixedDelay(task,1000,10000,TimeUnit.MILLISECONDS)
}
上图 task、与task2 其实是一样的
timerTask{}源码如下:
设置封装的协程(从大佬那里cv的,是真滴好用)
private fun <T> coroutine(block: suspend CoroutineScope.() -> T, uiBlock: suspend (T) -> Unit): Deferred<T> {
val deferred = async(CommonPool, CoroutineStart.DEFAULT,block)
launch(UI){
uiBlock(deferred.await())
}
return deferred
}
执行结果截图:
明显看到 task1只执行了1次。
问题阐述完毕,但是不知道为什么不去执行。有大佬看到解决,请留个言。
最后
以上就是忧心雨为你收集整理的kotlin使用timerTask{}执行协程任务失效问题的全部内容,希望文章能够帮你解决kotlin使用timerTask{}执行协程任务失效问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复