Не знаю, глупый ли это вопрос. Это может нарушить цель LiveData / ViewModel.
Могу ли я сделать LiveData статическим? Моя причина в том, что у меня есть слушатель из службы, который обновляет информацию. Так что мне нужен способ от сервиса «установить / изменить» LiveData.
Раньше я делал следующее, и это работает:
1. Сервис изменяет БД
2. ViewModel слушает изменение БД
3. Обновления пользовательского интерфейса в результате изменения liveData
Я обнаружил, что этот способ слишком медленный. Чтобы повысить производительность, мне нужно что-то вроде:
1. Сервис изменяет объект класса напрямую
2. ViewModel слушает изменения объекта класса
3. Обновления пользовательского интерфейса в результате изменения liveData
Чтобы достичь того, чего я хочу, мне нужно либо сделать MutableLiveData статическим, либо сделать так, чтобы класс ViewModel совместно использовал один и тот же экземпляр ViewModel между Activity.
Это хорошая идея?
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();
}
}