我有线程代码块,该代码块基本上显示进度条2秒钟,然后显示回收者视图。我想知道是否有更适当的方式编写此代码,例如协程或rxjava。我尝试了协程,但崩溃了。 代码:
runOnUiThread {
fabClose()
isOpen = false
rec_view.adapter=null
progressBar.visibility = View.VISIBLE
}
val handler = Handler()
val t = Timer()
t.schedule(object: TimerTask() {
override fun run() {
handler.post {
runOnUiThread {
imageRecognition()
progressBar.visibility = View.GONE
}
}
}
}, 2000)
答案 0 :(得分:1)
虽然您可以使用协程,但您尝试实现的目标似乎很简单,只是您的代码看起来比所需的要复杂得多。
您可以尝试使用在主循环程序(位于主线程中的循环程序)上调用的postDelayed()
的{{1}}方法:
Handler
答案 1 :(得分:1)
是的,您可以尝试使用 Kotlin协同程序来编写代码段,如下所示:
GlobalScope.launch(Dispatchers.Main) { // We launch new coroutine with Main thread as dispatcher
fabClose()
isOpen = false
rec_view.adapter=null
progressBar.visibility = View.VISIBLE
// Here delay is suspended function which stops further execution of thread without blocking it.
delay(2000L) // We provide non-blocking delay for 2 second which suspends this coroutine execution
imageRecognition()
progressBar.visibility = View.GONE
}
在这里,GlobalScope用于通过主线程创建我们的lauch
协程 CoroutineContext (也可以使用async
,两者之间的区别是它们提供的返回类型),并且我们将异步代码按顺序放置在Coroutine处理异步执行的位置。