Hec*_*tor 6 android kotlin-coroutines
我正在我当前的 Android 项目中研究 Kotlin Coroutine Actors。
目前我有以下课程
信使:
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)
}
}
Run Code Online (Sandbox Code Playgroud)
视图模型
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是在我的 Messenger 类中声明 Actors sendChannel
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)
}
}
Run Code Online (Sandbox Code Playgroud)
然而这给我带来了两个问题
1). My Actor is no longer within my ViewModelScope
2). How do I call the ViewModel Dispatch method
Run Code Online (Sandbox Code Playgroud)
解决问题2)。我可以将 dispatch 函数传递给我的 Messenger 类
我如何将演员与我的 ViewModelScope 相关联?
这整个方法有任何价值吗?
您可以传递viewmodelScopeMessenger 类并从该范围调用参与者。
private val sendChannel: SendChannel<I> = viewModelScope.actor {
for (message in channel) {
dispatch(message)
}
}
Run Code Online (Sandbox Code Playgroud)
你也可以覆盖 coroutineContext (我认为 Sendable 是 CoroutineScope 的子类)
override val coroutineContext: CoroutineContext
get() = viewModelScope.coroutineContext
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
257 次 |
| 最近记录: |