(StateFlow & ShareFlow) VS (Flow & LiveData)

持续创作,加快生长!这是我参与「日新计划 6 月更文应战」的第27天,点击检查活动概况

在之前的Flow,collect函数浅析和仿Flow构建器创立数据流文章中咱们探究了flow的简略运用及它的简略原理,可是生产过程中咱们往往会借用这些根底的api实现咱们复杂的逻辑处android平板电脑价格理,根据需缓存视频怎样转入相册求也推出了StateFlow和SharedFlow这两个特别的flow。接下来开端看下这几个Flow的特别之Android处和应用场景吧~~

官方推荐的Fl缓存是什么意思ow数据流流向:

数据流程

数据流包含三个实体:

  • 供给方会生成添加到数据流中的数据。得益于协程,数据流还能够异步生成数据缓存清理
  • (可选)中介缓存文件夹名称能够修正发送到数据流的值,或修正数据流本身。
  • 运用方则运用数据流中的值。

(StateFlow & ShareFlow) VS (Flow & LiveData)

大致流程

  • Producer经过MVVM的Mode线程数是什么l层供给,DDU的DataLayer层供给原始数据流;
  • Intermediary经过MVVM的ViewModel层,DDU的DomainLayer层供给转换可直接用于显示的数据流的操作
  • Consumer经过MVVM的Viewmvvm和mvc的区别层,DDU的UI层运用转换后的数据流进行烘托展示数据。

flow的根底运用就不介绍了,读者能够检查开头供给的两个链接检查。

切换线程

在flow内部不缓存的视频在哪答应运用不同的Conretin线程数越多越好吗eContext进行emit提交数据,所以想要在内部切换线程能够经过flowOn操作符进行转换

StateFlow & ShareFlowmvvm原理面试

StateFlowSh线程aredFlow是Flow A缓存视频在手机哪里找PI,答应数据流以最优方法宣布状况更新并向多个运用方宣布值。

这两个Flow和一般的Flow不一样, Flow咱们知道,只有当调用collect的时分flow传入的函数才会履行,而且每次调android手机用collect都会从头走一遍flow函数(实质是扩展函数),调用collect的时分履行这个扩展函数;可是这两个Flow不一样他们不依赖于外部调用(可装备稍后说明),他们是热流,他们宣布的数据会缓存起来当有订阅者的时分再android手机通知订阅者

StateFlowSharedFlow是宣布状况更新并向多个运用方宣布值而且能够携程网官网经过value特点获取当前最新值。类似于调查数据,数据更新,携程网飞机票预订官网运用方承受最新数据是不是和LiveData很像。确实像,但他比L线程池的七个参数i缓存视频怎样转入相册veData更强大~~

StateFl缓存英文ow

  • 线程切换:比较于LiveData更新数据的操作只能在主线程进行,可mvvm的理解是Flow能够经过flowOn来在不同缓存视频怎样转入相册的Dispatchers(线程android/harmonyos分发器,CoruntineC缓存文件夹名称ontext的一种)上运转切换线程的操作愈加便利
  • 数据回溯:比较于LiveData主动办理协程veandroid什么意思rsion来决议是否通知Ovserve而且只能收到androidstudio安装教程最新值的方法,Flow可经过结构函数装备reply字段决议获取之前的几回数据更新
  • 生命周期处理: 关于Liv携程电话eData来说,经过调查调用observe函数的时分传入LifecycleOwner内部注册线程数是什么生命周期回调的方法比较;Flow的调查collect函数需要在协程中调用也就是需要主动办理协程的生命周期,不然可能会呈现协程敞开收到数据改变更新UI发送NPE的错误,所以需要控制好调用collect的协程域Scope的携程生命周期,好在Android供给了几个协程效MVVM果域的api去敞开:

1.viewModelScope:跟随ViewModel的生命周期改携程网官网变,当ViewModel调查的组件销毁调用onClear的时分主动撤销协程,生命周期过长不采取一般在对数据进行处理的时分会运用

2mvvm框架.lifecycleScope: 此范围内发动的协程会在Liandroid平板电脑价格fecycle销毁时撤销;也能够经过when生命周期来指定何时敞开,假android是什么手机牌子Lifandroid什么意思ecycleandroid是什么手机牌子至少处于所需的最低状况,则会挂起在这些块内运转的任何协程,注Android意是挂起而不是销毁时的撤销,意味着仍是会浪费资源。

一定要注意撤销这个词和挂起的差异,挂起其实仍是有订阅联系的当flow发射时仍是会收到走collect上游并没有撤销,可是撤销就是协程效果域的撤销collect函数不会履行了。

可是咱们能够运用repeatOnLimvvm数据双向绑定原理fecycle,它当脱离某个生命周期的时分进行android下载安装撤销,符合的时协程分在敞开一携程网上订票火车票个新协程(也即会从头履行collect函数是新的订阅者)。

Aandroid什么意思ndroid官携程网上订票飞机方的警告:倾向于运用repeatOnLifecycleAPI 搜集数据流,而不是在launchWhenXAPI 内部进行搜集。由于后面的 API 会挂起协程,而不是在Lifecycle处于STOPPED状况时撤销。android平板电脑价格上游数据流会在后台保持活泼状况,并可能会宣布新的项并耗用资源

  • 需要给定一个初始值。
构建StateFlow &ShareFlow

官方示例:携程旅游网

将一般flow转换为ShareFlow(StateFlow的一种)经过shareIn操作符 需要传入以下三个参数:

(这三个参数)

class NewsRemoteDataSource(...,
  private val externalScope: CoroutineScope,
) {
  val latestNews: Flow<List<ArticleHeadline>> = flow {
    ...
  }.shareIn(
    externalScope,
    replay = 1,
    started = SharingStarted.WhileSubscribed()
  )
}
  • externalScope:用于同享数据流的CoroutineScope。此效果域函数的生命周期应善于任何运用方,以携程网上订票飞机使同享数据流在满足长的线程池的七个参数时刻内保持活泼状况。(超出该效果域时flow下流逻辑撤销

repeatOnLif线程数是什么ecycle针对生命周期撤销订阅流的搜集(上游)collect函数(符合在敞开新协程从头mvvm原理订阅),WhileSubscribed策略装备订阅者超时时刻进行撤销flowmvvm框架函数(下流)

搭配好这两个一个是订携程网飞机票预订官网阅者一个是被订阅者的联系处理好事务逻辑

  • repla前端mvvmy:要重放 (replay) 至每个新搜集器缓存视频合并的数携程客服电话据项数量。(发射值的时分也会存储值,可理解为装备缓冲区大小用于之后“回放”)
  • started:“发动”行为方针。

1.WhileSubscribed()当存在活泼订阅android是什么手机牌子者(调查携程网上订票火车票flow的协程域没有被撤销)时flow携程电话函数也会线程池面试题活泼(履行flo缓存视频在手机哪里找w函数),可装备最后一个订阅者撤销订阅的超时时线程撕裂者刻进行撤销flow函数运转也能够装备数据过期时刻(超越一段时刻将会从缓存的视频在哪缓冲中移除)

2.SharingStartedandroid下载安装.Eagerandroid平板电脑价格ly可当即发动供给方(flow函数协程立马运转),运用SharingStarted.Lazi缓存文件夹名称ly可在第一个订阅者呈现后开端同享数据(只有当订阅时才会运转)而且都在externalScope效果域撤销时撤销搜集。

行为方针链接

除此之外还可定义其他SharedFlow行为:

  • 经过replay,您能够针对新订阅者从头发送多个之前已宣布的值。

  • 经过onBufferOverflowmvvm与mvc,您能够指定相关方针来处理缓冲Android区中已存满要发送的数据项的情况。默认值为BufferOverflow.SUSPEND,这会使调用方挂起。其他选项包括DROP_LATESTDROP_OLDEST

  • 经过subscriptionCount特点,获取活泼状况的搜集器的数量。mvvm模式

  • 经过resetReplayCacheandroid/harmonyos函数清空数据缓存,供您在不想携程回放已向数据流发送的最新信息的情况下运用。

发表评论

提供最优质的资源集合

立即查看 了解详情