jcl*_*ova 6 android android-livedata android-viewmodel android-architecture-components
我不知道这是不是一个愚蠢的问题。这可能会违背 LiveData/ViewModel 的目的。
我可以将 LiveData 设为静态吗?我的原因是我有一个来自更新信息的服务的侦听器。所以我需要一种从服务中“设置/更改”LiveData 的方法。
我曾经执行以下操作并且它有效:
1. 服务更改数据库
2. ViewModel 侦听数据库更改
3. 来自 liveData 更改的 UI 更新
我发现这种方式太慢了。为了提高性能,我想要这样的东西:
1. 服务直接更改类对象
2. ViewModel 侦听类对象更改
3. 来自 liveData 更改的 UI 更新
为了实现我想要的,我需要使 MutableLiveData 静态或使 ViewModel 类在 Activity 之间共享 ViewModel 的相同实例。
这是个好主意吗?
public class MyViewModel extends AndroidViewModel {
// Note: this MutableLiveData is static
private static MutableLiveData<MyModel> mutableLiveData;
public MyViewModel(@NonNull Application application) {
super(application);
}
LiveData<MyModel> getLiveDataList() {
if (mutableLiveData == null) {
mutableLiveData = new MutableLiveData<>();
loadDataFromDb();
}
return mutableLiveData;
}
private void loadDataFromDb() {
// load data from DB
// mutableLiveData.setValue(MyModelFromDb); // Omit the real implementation
}
// Note: this method is static
public static void setData(MyModel newData) {
mutableLiveData.setValue(newData);
}
@Override
protected void onCleared() {
super.onCleared();
}
}
Run Code Online (Sandbox Code Playgroud)
ViewModelAndroid Jetpack(相对于其他版本)的全部意义ViewModel在于具有生命周期意识并执行魔法,例如在观察者被销毁(活动/片段)时销毁自身,或者在不初始化自身的情况下幸存配置更改(例如方向)重新进行,从而使处理与配置更改相关的问题变得更加容易。
ViewModel因此,如果您将或设为LiveData静态,您实际上会超出其目的,并且很可能会泄漏ViewModel数据,尽管这样做的需要是可以理解的。因此,这需要您设计解决方案,而您提到的第一种方法可能是您可以做到的最佳方法。我不明白为什么您对第一个解决方案有疑问。在我看来,它提供了最好的用户体验:
ViewModel在片段或活动中进行初始化onCreate并将其添加Observer到数据中。ViewModel据我所知,没有比这更好的了。由于您的问题是几个月前的,我很想知道您最终做了什么?
| 归档时间: |
|
| 查看次数: |
4341 次 |
| 最近记录: |