最近,我正在尝试使用androidx.work.*
内容执行后台任务。与MVVM模式配合使用时效果很好。但是,在使用Worker(通过OneTimeWorkRequest.Builder)替换AsyncTask时遇到了几个问题。
首先,如何将普通对象的结果从Worker传回?似乎仅支持原始类型。如果我想解码工作线程中的图像文件并将解码的可绘制对象或位图传递回主线程观察者,该怎么办?我有一个解决方法是将对象放在某些全局数据存储中,但这似乎不是一个好习惯。
[另一个问题是,当我尝试观察通过WorkManager.getWorkInfosByTagLiveData(TAG_NAME)
获得的实时数据时,它还会将以前排队的工作人员信息返回给我。因此,我必须致电WorkManager.pruneWork()
以避免此问题。而且这似乎也不是一个好习惯。
感谢您的建议。
关于返回结果:简而言之,与使用AsyncTask的方法相同。您不应在任务之间传递对象。使用“回叫”或此答案中说明的界面:
How to get the result of OnPostExecute() to main activity because AsyncTask is a separate class?