包含 Handler 的吸气剂
Posted
技术标签:
【中文标题】包含 Handler 的吸气剂【英文标题】:Getters incorporating Handler 【发布时间】: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 的运作方式很奇怪。
【问题讨论】:
为什么不能使用回调? 【参考方案1】:创建一个应用程序类,在其中创建一个静态 Context 字段,然后在您的 Handler 中使用Context.getMainLooper()
,我认为它会解决您的问题。
【讨论】:
以上是关于包含 Handler 的吸气剂的主要内容,如果未能解决你的问题,请参考以下文章