У меня есть Room DAO, который возвращает записи в виде LiveData:
LiveData<List<Record>> records = myDao.getAllRecords();
Это имеет смысл, поскольку в большинстве мест записи будут использоваться для обновления пользовательского интерфейса.
Однако в в нескольких местах, я хочу просто обработать записи один раз и закончить. Лучшее, что я могу придумать, это:
records.observe(
lifecycleOwner,
dbResults -> {
// Process dbResults...
records.removeObservers(lifecycleOwner);
return;
});
Если я не позвоню removeObservers
, я в конечном итоге обрабатываю эти результаты каждый раз, когда они меняются. Мой фрагмент кода прост, но в реальной реализации у блока // Process dbResults...
может быть много разветвлений, и мне нужно было бы вызывать removeObservers
во многих местах.
Есть ли более элегантный способ сделать это? И действительно ли это безопасно делать в многопоточной среде?
PS: я смотрел на SingleLiveEvent
, но это тоже кажется хакерским, и я не хочу переключаться с LiveData на этот во всех местах.