提问人:Sohel Shaikh 提问时间:4/19/2023 最后编辑:Sohel Shaikh 更新时间:4/19/2023 访问量:40
使用WorkManager时如何创建普通Worker?
How to create a common worker when using WorkManager?
问:
我想创建一个使用 .NetworkRequestWorker
WorkManager
所有网络请求都将具有一组类似的逻辑:
- 网络请求的参数(请求正文)
- 请求成功时执行某些操作
- 请求失败时执行某些操作
我想将此功能抽象出来,以便我们可以使用同一个工作线程来发出网络请求。
由于您无法将参数传递给 我不确定将其抽象出来的最佳方法是什么。CoroutineWorker
此外,Worker 只能接受原始数据类型,一种选择是序列化一个类并将其传递给 worker,但我认为可能有更好的方法来实现这一目标。
另一种选择是为每个网络请求创建一个新的 Worker 类,但这会导致代码重复。
Google 的 nowinandroid 示例将存储库传递给 worker,这是否意味着我们可以将类作为参数传递。我们如何将对象传递给 worker?
答:
0赞
fshdn19
4/19/2023
#1
我认为您不应该用于发出常规的网络请求,例如,获取数据、调用 API 等。
因为:WorkManager
- 很难控制进度
- 处理错误或获得响应很困难
- 更重要的是,您无法确保立即执行网络请求
您可以直接在视图模型或活动中执行常规网络请求,使用协程和/或 Retrofit 进行分段。它安静、简单且易于控制。
例如,使用协程,您可以在此处看到它
评论
CoroutineWorker
Worker
WorkerParameters
WorkManager