我对 Kovenant 有一个奇怪的问题。要么我不明白,要么有一些错误。下面的代码是一个简单的 Android task { } successUi { }
。然而,succesUi
生成android.view.ViewRootImpl$CalledFromWrongThreadException:只有创建 View 层次结构的原始线程才能触摸其 View 。
,当检查线程名称时,它是: kovenant-callback-2
,不是主线程iv
,而是ImageView
。
val promesa1 = task {
val nazwa = Thread.currentThread().name
print(nazwa)
} successUi {
val nazwa = Thread.currentThread().name
print(nazwa)
try {
iv!!.setImageBitmap(null)
} catch (ex : Exception) {
print("Mamy:"+ex.toString())
}
}
最佳答案
在 MainActivity 上调用 startKovenant()
(和 stopKovenant()
)非常重要。这将通过保持线程事件并将正确的调度程序附加到 UI 回调来设置 Kovenant 以与 Android 一起使用。
所以类似:
public class MainActivity : ... {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(...)
// Configure Kovenant with standard dispatchers
startKovenant()
}
...
override fun onDestroy() {
stopKovenant()
super.onDestroy()
}
}
有关此主题的更多信息可以在 Android configuration documentation 中找到。
关于Kotlin kovenant succesUi 在错误的线程上?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34672514/