使用WorkManager时如何创建普通Worker?

How to create a common worker when using WorkManager?

提问人:Sohel Shaikh 提问时间:4/19/2023 最后编辑:Sohel Shaikh 更新时间:4/19/2023 访问量:40

问:

我想创建一个使用 .NetworkRequestWorkerWorkManager

所有网络请求都将具有一组类似的逻辑:

  • 网络请求的参数(请求正文)
  • 请求成功时执行某些操作
  • 请求失败时执行某些操作

我想将此功能抽象出来,以便我们可以使用同一个工作线程来发出网络请求。

由于您无法将参数传递给 我不确定将其抽象出来的最佳方法是什么。CoroutineWorker

此外,Worker 只能接受原始数据类型,一种选择是序列化一个类并将其传递给 worker,但我认为可能有更好的方法来实现这一目标。

另一种选择是为每个网络请求创建一个新的 Worker 类,但这会导致代码重复。

Google 的 nowinandroid 示例将存储库传递给 worker,这是否意味着我们可以将类作为参数传递。我们如何将对象传递给 worker?

安卓 Android-WorkManager 安卓网络

评论

0赞 fshdn19 4/19/2023
我没有得到你想要的。但我只想告诉你,这是一个,所以你可以通过 .CoroutineWorkerWorkerWorkerParameters
0赞 Sohel Shaikh 4/19/2023
@fshdn19 这里的参数是指用于发出网络请求的参数,这也可以是具有多个参数的请求体
0赞 fshdn19 4/19/2023
您要执行哪种网络请求?我认为不适合这种情况。WorkManager
0赞 Sohel Shaikh 4/19/2023
@fshdn19 这可以是任何网络请求,例如删除服务器上的某些内容、修改某些内容或获取数据。
0赞 fshdn19 4/19/2023
因此,您可以在屏幕上发出网络请求,例如在视图模型或片段中。我认为您不应该在这种情况下使用 WorkManager

答:

0赞 fshdn19 4/19/2023 #1

我认为您不应该用于发出常规的网络请求,例如,获取数据、调用 API 等。 因为:WorkManager

  • 很难控制进度
  • 处理错误或获得响应很困难
  • 更重要的是,您无法确保立即执行网络请求

您可以直接在视图模型或活动中执行常规网络请求,使用协程和/或 Retrofit 进行分段。它安静、简单且易于控制。

例如,使用协程,您可以在此处看到它