我不知道这是不是一个愚蠢的问题。这可能会破坏 LiveData/ViewModel 的目的。
我可以将 LiveData 设为静态吗?我的原因是我有一个来自更新信息的服务的侦听器。所以我需要从服务中“设置/更改”LiveData。
我曾经做过以下操作,它可以工作:
1. 服务更改 DB
2. ViewModel 监听 DB 更改
3. 从 liveData 更改中更新 UI
我发现这种方式太慢了。为了提高性能,我想要这样的东西:
1. 服务直接更改类对象
2. ViewModel 监听类对象更改
3. 从 liveData 更改中更新 UI
为了实现我想要的,要么我需要将 MutableLiveData 设为静态,要么让 ViewModel 类在活动之间共享相同的 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();
}
}