stateflow和sharedflow以及channel都属于热流,但是如何将一个cold flow转成hotflow? kotlin提供了一个shareIn和stateIn的方法,看一下方法的定义:
public fun <T> Flow<T>.stateIn(
scope: CoroutineScope,
started: SharingStarted,
initialValue: T
): StateFlow<T>
public fun <T> Flow<T>.shareIn(
scope: CoroutineScope,
started: SharingStarted,
replay: Int = 0
): SharedFlow<T>
shareIn方法将流转换为SharedFlow
stateIn方法将流转换为StateFLow
参数说明:
scope:flow需要在给定的conrutinue里面进行
started:开始流的方式,这里有三种:
1.SharingStarted.Eagerly
: 无论当前有没有订阅者,流都会开始,订阅者只能接收到replay个缓冲区的值
2.SharingStarted.Lazily
:当有第一个订阅者时,流才会开始,后面的订阅者只能接收到replay个缓冲区的值,当没有订阅者时流还是活跃的
3.SharingStarted.WhileSubscribed
定义如下:
/*
Sharing is started when the fi