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)
...
}
}
我有一些视图模型:
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)
...
}
}