如何解决如何封装Android Coroutine Actor并将其仍与viewModelScope关联
我正在我当前的Android项目中调查Kotlin协程演员。
目前我有以下课程
信使:
import kotlinx.coroutines.channels.SendChannel
import org.research.development.intentions.action.Sendable
class Messenger<T>(private val sendChannel: SendChannel<T>) : Sendable<T> {
override suspend fun send(message: T) {
sendChannel.send(message)
}
}
ViewModel
abstract class BaseViewModel<I,S>(initialState: S) : ViewModel(),ViewModelable<I,S> {
private val sendChannel: SendChannel<I> = viewModelScope.actor {
for (message in channel) {
dispatch(message)
}
}
protected val internalStateFlow = MutableStateFlow(initialState)
val stateFlow: StateFlow<S>
get() = internalStateFlow
private val messenger: Sendable<I> = Messenger(sendChannel)
override fun send(message: I) {
viewModelScope.launch(Dispatchers.IO) {
messenger.send(message)
}
}
}
我想让Actors sendChannel在我的Messenger类中声明
import kotlinx.coroutines.channels.SendChannel
import org.research.development.intentions.action.Sendable
class Messenger<T>() : Sendable<T> {
private val sendChannel: SendChannel<I> = actor { // viewModelScope????
for (message in channel) {
dispatch(message) // HOW DO I CALL THIS METHOD????
}
}
override suspend fun send(message: T) {
sendChannel.send(message)
}
}
但这会给我带来两个问题
1). My Actor is no longer within my ViewModelScope
2). How do I call the ViewModel Dispatch method
解决问题2)。我可以将调度功能传递到Messenger类中
如何将角色与ViewModelScope相关联?
这整个方法有什么价值吗?
解决方法
您可以在Messenger类中传递viewmodelScope
并从该范围调用actor。
private val sendChannel: SendChannel<I> = viewModelScope.actor {
for (message in channel) {
dispatch(message)
}
}
您还可以覆盖coroutineContext(我想Sendable是CoroutineScope的子类)
override val coroutineContext: CoroutineContext
get() = viewModelScope.coroutineContext
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。