我有一些代码,如:
doAsync{
...
uiThread{
...
}
}
Run Code Online (Sandbox Code Playgroud)
我如何用kotlinx-coroutines-core lib中的新东西替换doAsync和uiThread?
Rob*_*bin 11
协程库版本0.26的更新:
UI已重命名为Main.完整的工作示例为0.26:
async(CommonPool) {
...
withContext(Main) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
您不需要从这里进一步阅读,我将其留给那些对此解决方案发展感兴趣的人.
coroutines库版本0.20的更新:
run现在已弃用,您应该使用withContext.0.20的完整工作示例:
async(CommonPool) {
...
withContext(UI) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
自协同程序库更新到版本0.13后更新:
您现在可以compile 'org.jetbrains.kotlinx:kotlinx-coroutines-android:0.13'向gradle 添加依赖项以导入特定于android的UI协同程序上下文并使用它如下所示:
async(CommonPool) {
...
run(UI) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
无需再定义自己的协程调度程序,正如下面原始答案时仍需要的那样.
原始答案:
它应该像这样工作:
async(CommonPool) {
...
run(MainThread) {
...
}
}
Run Code Online (Sandbox Code Playgroud)
问题是,现在,没有标准的实现MainThread可以让你回到Android上的主线程(虽然这将在未来的版本中出现!),所以你必须自己这样做,例如:
val MainThread = object : Executor {
private val mHandler = Handler(Looper.getMainLooper())
override fun execute(command: Runnable) {
mHandler.post(command)
}
}.toCoroutineDispatcher()
Run Code Online (Sandbox Code Playgroud)
问题中伪代码的确切替换是
GlobalScope.launch(Dispatchers.Default) { // replaces doAsync
...
launch(Dispatchers.Main) { // replaces uiThread
...
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4663 次 |
| 最近记录: |