Какой элегантный способ работать с LiveData из базы данных Room один раз? - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть 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 на этот во всех местах.

...