Как использовать androidx.work для замены AsyncTask? - PullRequest
0 голосов
/ 21 марта 2019

В последнее время я пытаюсь использовать androidx.work.* материал для выполнения фоновых задач. Он отлично работает с шаблоном MVVM. Тем не менее, я столкнулся с несколькими проблемами при использовании Worker (через OneTimeWorkRequest.Builder) для замены AsyncTask.

Во-первых, как передать результат общего объекта обратно из Worker? Кажется, поддерживаются только примитивные типы. Что если я захочу декодировать файл изображения в рабочем потоке и передать декодированный чертеж или растровое изображение обратно наблюдателю основного потока? У меня есть обходной путь - поместить объект в какое-то глобальное хранилище данных, но это не очень хорошая практика.

Другая проблема состоит в том, что, когда я пытаюсь наблюдать данные, полученные через WorkManager.getWorkInfosByTagLiveData(TAG_NAME), он также возвращает мне информацию о бывшем работнике в очереди. Поэтому я должен позвонить WorkManager.pruneWork(), чтобы избежать этой проблемы. И это тоже не очень хорошая практика.

Спасибо за ваш совет.

...