MutableStateFlow 收集器不接收数据

MutableStateFlow collector doesn't receive data

我有一些视图模型:

    private val locationFlow = locationProviderClient.locationFlow(LocationModule.locationRequest)

    val position = MutableStateFlow(Location(LocationManager.NETWORK_PROVIDER))
    val positions = MutableStateFlow(emptyList<Position>())

    init {
        collectLocation()
    }

    private fun collectLocation() {
        viewModelScope.launch {
            locationFlow.collect {
                position.value = it
                positions.value = positionService.updateLocation(it.toPosition())
            }
        }
    }

正在启动当前位置的初始化流程。在每个新值上,最后一个位置应该被发送到 position 状态流并且应该执行网络请求。 这是负责收集状态流的片段代码

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        lifecycleScope.launchWhenStarted {
                ...
                viewModel.positions.collect(updateMarkers)
                viewModel.position.collect(updateCamera)
                ...
            }
}

现在,当发出片段开始位置时,两个流都会更新,请求已发送 updateMarkers 被调用,但 updateCamera 未被调用。

我想有一些细微的错误,如果没有,有人能告诉我我到底做错了什么吗?

如果你正在更新 UI 它应该从主线程调用

override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        lifecycleScope.launch(Dispatchers.IO) {
                ...
                viewModel.positions.collect(updateMarkers)
                viewModel.position.collect(updateCamera)
                ...
            }
    }

你的两个flow的collect不是并发的,还是顺序执行的。


override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        lifecycleScope.launch(Dispatchers.IO) {
                ...
                viewModel.positions.collect(updateMarkers)
                ...
            }

        lifecycleScope.launch(Dispatchers.IO) {
                ...
                viewModel.position.collect(updateCamera)
                ...
            }
    }