小编Fra*_*gan的帖子

为什么 ConflatedBroadcacstChannel.asFlow() 没有调用 Flow.onCompletion?

Coroutines+Flow/LiveData 的新 Android 代码实验室中,您更新了 LiveData api 以使用 Flow,但我注意到一些onCompletion未按预期调用的意外行为。我们要替换的 LiveData 代码:

\n\n
viewModelScope.launch {\n  try {\n    _spinner.value = true\n  ...query some data...\n  } catch (error: Throwable) {\n    _snackbar.value = error.message\n  } finally {\n    _spinner.value = false\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我们在代码实验室结束时得到的流程代码:

\n\n
val growZoneChannel = ConflatedBroadcastChannel<Int>()\n...\ngrowZoneChannel.asFlow()\n       .mapLatest { growZone ->\n           _spinner.value = true\n           ...query some data...\n       }\n       .onCompletion {  _spinner.value = false }\n       .catch { throwable ->  _snackbar.value = throwable.message  }\n       .launchIn(viewModelScope)\n
Run Code Online (Sandbox Code Playgroud)\n\n

当您运行 Flow 时,微调器永远不会消失,因为即使mapLatest转换完成,也永远不会调用 onCompletion。代码实验室声明,“ …

android kotlin kotlin-coroutines kotlin-flow

5
推荐指数
0
解决办法
2187
查看次数

标签 统计

android ×1

kotlin ×1

kotlin-coroutines ×1

kotlin-flow ×1