假设有一个 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()
,是否有其他方法可以识别以避免不必要的网络调用
最佳答案
您可以在 ViewModel
的 init
中调用您的方法。
class YourViewModel() : ViewModel() {
init {
getBooksFromSource()
}
}
您的 ViewModel 将在配置更改后保留其实例,并且不会重新创建。将您的方法放在 init block 中将防止对它们进行多次调用,因为一旦创建了 ViewModel,它只会被调用一次。
关于android - 使用 Android-ViewModel (M-V-VM) 避免重复的网络调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57095322/