kotlin使用timerTask{}执行协程任务失效问题
程序员文章站
2022-06-09 17:40:51
...
今天在做需求在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次。
问题阐述完毕,但是不知道为什么不去执行。有大佬看到解决,请留个言。
上一篇: 硬币游戏 [博弈论, 思维题]