В последнее время я пытаюсь использовать androidx.work.*
материал для выполнения фоновых задач. Он отлично работает с шаблоном MVVM. Тем не менее, я столкнулся с несколькими проблемами при использовании Worker (через OneTimeWorkRequest.Builder) для замены AsyncTask.
Во-первых, как передать результат общего объекта обратно из Worker? Кажется, поддерживаются только примитивные типы. Что если я захочу декодировать файл изображения в рабочем потоке и передать декодированный чертеж или растровое изображение обратно наблюдателю основного потока? У меня есть обходной путь - поместить объект в какое-то глобальное хранилище данных, но это не очень хорошая практика.
Другая проблема состоит в том, что, когда я пытаюсь наблюдать данные, полученные через WorkManager.getWorkInfosByTagLiveData(TAG_NAME)
, он также возвращает мне информацию о бывшем работнике в очереди. Поэтому я должен позвонить WorkManager.pruneWork()
, чтобы избежать этой проблемы. И это тоже не очень хорошая практика.
Спасибо за ваш совет.