SharedFlowImpl类实现了SharedFlow接口,重写了此中的常量replayCache,当有新订阅者出现时,假如replayCache存在,而且有缓存数据,则优先从replayCache中获取,代码如下:
override val replayCache: List<T> // 只能获取,不能设置,加锁 get() = synchronized(this) { // 获取当前replayCache中缓存数据的数量 val replaySize = this.replaySize // 假如数量为0,则返回一个空列表 if (replaySize == 0) return emptyList() // 若数量不为0,则根据容量创建一个列表 val result = ArrayList<T>(replaySize) // 获取缓存数组 val buffer = buffer!! // 遍历replayCache,将数据举行类型转换,并添加到列表中 @Suppress("UNCHECKED_CAST") for (i in 0 until replaySize) result += buffer.getBufferAt(replayIndex + i) as T // 返回列表 result }6.热流的融合