如何解决如何将回调/流返回给调用者线程?
我有一些“ A”类,其内部工作是使用带有流的rx或协程执行的。类“ A”不应返回任何rx /协程(和流)实例,它们的工作应被隐藏,我们需要Future结果进行回调并在custum Observer上进行观察。
调用者类'B'可以在主(UI)线程或另一个线程上调用A的方法。如果在Ui线程上调用方法,这很容易,因为我们可以在Main线程上观察并使用相应的例程范围。
但是,如果调用者的线程不是主线程,我们该如何处理这种情况?
解决方法
使用Handler
class A {
private val mainHandler = Handler(Looper.getMainLooper())
fun <T> observe(onChanged: (T) -> Unit) {
...
mainHandler.post { onChanged(value) }
}
}
,
您的课程A
和B
的样子如何?
但是如果调用者的线程不在,我们该如何处理这种情况 主要吗?
如果您在B
中的代码是在协程中运行的,则使用withContext()
并仅在主线程上进行调用:
class B(private val a: A) {
fun doStuffIn(scope: CoroutineScope) {
scope.launch {
...
withContext(Dispatchers.Main) {
a.collectData()
}
}
}
// or:
fun CoroutineScope.doStuff() {
launch {
...
withContext(Dispatchers.Main) {
a.collectData()
}
}
}
// or:
suspend fun doStuff2() {
...
withContext(Dispatchers.Main) {
a.collectData()
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。