首页 > 解决方案 > 如何使用 androidx.work 替换 AsyncTask?

问题描述

最近我正在尝试使用androidx.work.*东西来执行后台任务。它适用于 MVVM 模式。但是,我在使用 Worker(通过 OneTimeWorkRequest.Builder)替换 AsyncTask 时遇到了几个问题。

首先,如何将通用对象结果从 Worker 传回?似乎只支持原始类型。如果我想在工作线程中解码图像文件并将解码的可绘制或位图传递回主线程观察者怎么办?我有一个解决方法是将对象放在一些全局数据存储中,但这似乎不是一个好习惯。

另一个问题是,当我尝试观察通过 获得的实时数据时WorkManager.getWorkInfosByTagLiveData(TAG_NAME),它也会将以前排队的工人信息返回给我。所以我必须打电话WorkManager.pruneWork()来避免这个问题。这似乎也不是一个好习惯。

谢谢你的建议。

标签: androidandroid-asynctaskandroidxandroid-workmanager

解决方案


关于返回结果:简单地说,就像你用 AsyncTask 做的一样。您不应该在任务之间传递对象。使用此答案中解释的“回调”或接口:

由于 AsyncTask 是一个单独的类,如何将 OnPostExecute() 的结果获取到主要活动?


推荐阅读