即使协程仅更新一次,也要从协程发布到LiveData以更新UI

问题描述 投票:1回答:1

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

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

谢谢!

android kotlin viewmodel
1个回答
1
投票

然后在我的片段中设置观察者会很浪费,因为我知道事实上他们只会被调用一次?

它们可能被多次呼唤。

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

所以,流量可能会变成:

  • 您的片段已创建
  • 您的视图模型已创建,并且您启动了网络I / O
  • 您的片段实例化其UI
  • 您的片段遵守LiveData
  • 您的协程完成,并且您的视图模型更新了LiveData
  • 您的片段从LiveData接收值并更新UI
  • 用户扭转手腕并旋转屏幕
  • 您的片段被破坏
  • 您的替换片段已创建
  • 您的视图模型已保留,并且您的替换片段使用相同的LiveData]获得相同的视图模型>
  • 您的替换片段实例化其UI
  • 您的替换片段遵守LiveData
  • 您的替换片段从LiveData接收值并更新UI
  • 所以,您所描述的通常是合理的。

© www.soinside.com 2019 - 2024. All rights reserved.