【发布时间】:2021-11-05 01:00:00
【问题描述】:
像 ExoPlayer 这样的库要求对它的所有调用都在主线程上。在这种情况下,我有一个从 ExoPlayer 获取属性的 getter,但它应该来自主线程。
我尝试使用Handler,但是没有办法等待它......
val currentTrackIndex: Int
get() {
var result = -1
handler.post {
result = exoPlayer.currentIndex
}
return result
}
...结果总是-1。
我发现唯一可行的方法是使用runBlocking。但是,这似乎不应该用于生产:
val currentTrackIndex: Int
get() {
return runBlocking {
return@runBlocking exoPlayer.currentIndex
}
}
有没有更好的方法来阻塞 getter 中的主线程?
注意:所有这些调用都在 Service 中。
注意 2:即使我需要阻塞主线程(这可能会引发危险信号),获取属性也是尽可能即时的。 ExoPlayer 的运作方式很奇怪。
【问题讨论】:
-
为什么不能使用回调?
标签: android multithreading kotlin exoplayer