flow-event-bus icon indicating copy to clipboard operation
flow-event-bus copied to clipboard

使用LifeCycleService 监听APP级别的事件,进入后台一段时间观察者被移除

Open Pengjunke1996 opened this issue 2 years ago • 3 comments

感觉是因为Flow没有保存观察者,观察者都是通过协程挂起保存的,如果协程结束,则观察者自然退订。通过这个点来看Flow并不适合事件总线啊,通过携程的挂起保存观察者会导致内存暴涨,如果使用的较多。

Pengjunke1996 avatar Jan 06 '23 08:01 Pengjunke1996

MutableSharedFlow缓存设置的容量为Int.MAX_VALUE(可以理解为无限大), 也就注定了缓存策略不能定义为Drop_OLDEST,这样的话旧的数据就会一直在缓存中无法释放,因为MutableSharedFlow中的数据在被所有订阅者接收后仍然会一直保留,确实存在事件太多占用内存暴涨的情况。

rainfoam avatar May 18 '23 02:05 rainfoam

如果有一份持续更新的数据,建议StateFlow比较合适,stateFlow.value=newData,这样修改的是value的内存,效率高。但是如果修改太快,建议delay(1)将协程挂起一次,不然修改太快时,StateFlow没有标记新的状态,那么中间的值就都收不到了,哈哈哈

rainfoam avatar May 18 '23 02:05 rainfoam

StateFlow在Google的设计里用于数据驱动,中间数据丢失不应影响程序状态崩坏。

JeckOnly avatar Aug 02 '23 03:08 JeckOnly