美文网首页
Android 状态流和共享流

Android 状态流和共享流

作者: 蜗牛是不是牛 | 来源:发表于2022-08-08 11:17 被阅读0次

如果您厌倦了阅读互联网相关状态流和共享流上的所有内容并想知道它们实际上是什么,那么在这篇博客中,我分享了一些对它的简单理解,并查看所有代码片段以便更好地理解。

状态流:

它是一个流 api,用于存储当前和更新的值状态。并在状态发生任何变化时通知消费者。

执行:

以下是视图模型和活动的代码。ViewModel 表现为生产者,而 Activity 表现为消费者。对于状态流,我们将使两个实例可变和不可变,正如您在视图模型类中看到的那样。_stateFlow 是可变的,而 stateFlow 是不可变的实例。所有改变值状态的操作都应用在视图模型中的 _stateFlow 上,消费者使用 stateFlow 实例,以便他们可以收集数据及其变化。

生产者:

class viewModel() : ViewModel() {

   private val _stateFlow = MutableStateFlow(0);  // Mutable State Flow

   val stateFlow = _stateFlow.asStateFlow();  // Immutable State Flow

   fun incrementCounter(){  // changes the state
       _stateFlow.value +=1;
   }
  
}

消费者:

class MainActivity : AppCompatActivity() {

   lateinit var button: Button
   lateinit var counter: TextView
   val view_model:ViewModel = viewModel()

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       button = findViewById(R.id.button)

       counter = findViewById(R.id.counter)

       lifecycleScope.launch {
           repeatOnLifecycle(Lifecycle.State.STARTED) {
               (view_model as viewModel).stateFlow.collectLatest { number ->
                  counter.text = number.toString()
               }
           }
       }

       button.setOnClickListener{
           (view_model as viewModel).incrementCounter()
       }

   }

}

共享流程:

SharedFlow 是一种允许在多个收集器或消费者之间共享自身的流,因此只有一个流有效地为所有同时收集的收集器运行。

执行:

正如我已经制作了两个共享流实例,一个是可变的,另一个是不可变的。不可变实例将用于收集数据,我们将使用可变实例发出数据。通过调用 squareNumber() 函数,我们将以流的形式发出数据并从两个收集器或消费者那里收集数据。

class viewModel() : ViewModel() {

   private val _sharedFlow = MutableSharedFlow<Int>() // Mutable Share Flow

   val sharedFlow = _sharedFlow.asSharedFlow()  // Immutable Share Flow

   fun squareNumber(number:Int){
       viewModelScope.launch {
           _sharedFlow.emit(number * number)
       }
   }


   init {
       viewModelScope.launch {
           sharedFlow.collect {
               delay(2000L)
               println("First Flow : The received Number is $it")
           }
       }
       viewModelScope.launch {
           sharedFlow.collect {
               delay(3000L)
               println("Secound Flow : The received Number is $it")
           }
       }

       squareNumber(3)
   }
}

代码: 状态流和共享流

链接:https://abdulmueez.hashnode.dev/android-state-flow-and-shared-flow

相关文章

  • Android 状态流和共享流

    如果您厌倦了阅读互联网相关状态流和共享流上的所有内容并想知道它们实际上是什么,那么在这篇博客中,我分享了一些对它的...

  • 流计算(三):状态管理

    两种状态 流在执行过程中涉及到的状态分为两类:流数据状态和流信息状态。 流数据状态:在流数据处理的过程中,可能需要...

  • 心流状态之细则集

    1. 心流兴奋状态心流兴奋状态,是一种非常难得的高效状态。找到并记住这些心流兴奋状态,总结一下规律和细则集,...

  • tensorflow随笔

    Tensorflow使用数据流程图表达计算过程和共享状态,使用节点表示抽象计算,使用边表示数据流。 Tensorf...

  • MediaPlayer&VideoView

    阅读原文 Android MediaPlayer状态机 对播放音频/视频文件和流的控制是通过一个状态机来管理的。下...

  • 2019-06-13

    《财务自由之路》中提到心流状态,什么是心流状态?心流状态是指我们能够在工作中达到的最美好、最平和的状态就是心流的状...

  • 你有体验过心流的状态吗?

    你有到达过心流状态吗? 你大概多久能到达一次心流状态? 你还记得上次心流状态下的那种感觉吗? 心流状态是什么? 积...

  • 心流状态

    今天加班工作状态特别棒。

  • 心流状态

    想象一下你正全神贯注于某项活动,可以是某种体育活动,比如攀岩或滑雪;可以是某种艺术或创意活动,比如弹钢琴或绘画;也...

  • 心流状态

    《心流》的作者米哈里在研究对象中发现,无论多么不同的活动,在进行得极为顺利的时候,作为当事人的感觉都极为类似。另外...

网友评论

      本文标题:Android 状态流和共享流

      本文链接:https://www.haomeiwen.com/subject/locnwrtx.html