gpt4 book ai didi

android - 即使LiveData仅更新一次,也可以从协同程序发布到LiveData到更新UI

转载 作者:行者123 更新时间:2023-12-02 13:31:52 25 4
gpt4 key购买 nike

在ViewModel的构造函数中,我立即启动协程进行一次网络调用。要基于此网络调用的结果更新UI,我将更新发布到ViewModel中的一些LiveData变量中。这些LiveData变量依次由一个片段观察,然后进行必要的UI更新。

我想知道的是,这是否是从协程进行UI更新的有效方法。正如我前面提到的,网络请求只是初始化时完成的一件事,因此LiveData变量永远不会被更新一次以上。那么,在我的片段中设置观察者是否很浪费,因为我知道事实上它们只会被调用一次?如果是这样,哪种更好的方法呢?

谢谢!

最佳答案

Is it then wasteful to set up observers in my fragment since I know for a fact they will only be called once?



它们可能被多次调用。

首先, LiveData是一个值持有者。并且,具体来说,通过在 LiveData中包含 ViewModel,您可以保留 LiveData和在配置更改(屏幕旋转,暗模式切换等)中保持的值。

因此,流程可能最终成为:
  • 您的片段已创建
  • 您的viewmodel已创建,并且您启动了网络I / O
  • 您的片段实例化其UI
  • 您的片段遵循LiveData
  • 您的协程已完成,您的 View 模型更新了LiveData
  • 您的片段从LiveData接收值并更新UI
  • 用户扭动手腕并旋转屏幕
  • 您的片段已被破坏
  • 您的替换片段已创建
  • 您的 View 模型被保留,并且您的替换片段使用相同的LiveData相同的 View 模型
  • 您的替换片段实例化其UI
  • 您的替换片段遵循LiveData
  • 您的替换片段从LiveData接收值并更新UI

  • 因此,您所描述的通常是合理的。

    关于android - 即使LiveData仅更新一次,也可以从协同程序发布到LiveData到更新UI,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60749014/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com