android - 使用 Android-ViewModel (M-V-VM) 避免重复的网络调用

标签 android mvvm android-viewmodel

假设有一个 Activity “A”。 onCreate() 中的内部 Activity “A”方法,您正在初始化 ViewModel,然后使用像 vmInstance.getBooksFromSource() 这样的 View 模型进行网络调用里面onCreate()仅有的。现在假设我的网络调用响应已经到来,同时用户将旋转屏幕并再次 Activity “A”onCreate()方法将被触发,我们将获得相同的旧 View 模型实例,但再次是我的 vmInstance.getBooksFromSource()会被触发。因此,如果我已经收到响应,现在我想删除不必要的调用,这样就不会再次访问服务器。

现在,我正在 Activity 内部维护一个本地 bool 标志(默认情况下其值为 false),并在我从服务器获取响应并将其值保存在 onSavedInstanceState() 时启用它。 。然后里面onCreate()方法我正在检查它的值(通过 bundle 检查)如果它为假那么只有我正在进行网络调用。如果数据已来自 viewodel 方法,即 vmInstance.getBooksFromSource(),是否有其他方法可以识别以避免不必要的网络调用

最佳答案

您可以在 ViewModelinit 中调用您的方法。

class YourViewModel() : ViewModel() {

    init {
        getBooksFromSource()  
    }
}

您的 ViewModel 将在配置更改后保留其实例,并且不会重新创建。将您的方法放在 init block 中将防止对它们进行多次调用,因为一旦创建了 ViewModel,它只会被调用一次。

关于android - 使用 Android-ViewModel (M-V-VM) 避免重复的网络调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57095322/

相关文章:

c# - 从一个 ViewModel 访问另一个 ViewModel 中的属性

android - 具有 Activity 和 Fragments 的 ViewModel 粒度

java - 如何按最低数字/字符串Android Studio对recyclerview进行排序

java - 为什么我的处理程序不工作?

c# - 在 WPF 中对分类数据进行分组

AndroidViewModel 实例化而不传递应用程序上下文?

android - 单元测试: Observer onChanged should be called twice instead of once

android - 以编程方式为 Google map V2 截取屏幕截图

android - 文件未添加到图库 android

java - 添加或删除数据时,房间数据库未正确更新 ID