【问题标题】:How to run workmanager immediately如何立即运行workmanager
【发布时间】:2021-11-03 21:29:47
【问题描述】:

在我的 android 应用程序中,我有一个功能,用户可以通过按抽屉菜单中的某个位置的同步按钮来同步数据(保存在 sqlite 中)。单击同步按钮后,我将启动服务并将数据同步到服务器。

但现在我正在使用工作管理器来同步数据。我的问题是我们如何在单击按钮时立即启动工作管理器。

我正在创建一次性请求。有时它会触发,但有时不会。

【问题讨论】:

  • 你可以使用后台服务代替Workmanager
  • @HarishJose 我无法使用服务。因为我还想每 20 分钟运行一次同步过程(即使应用程序在后台)。如果我使用服务,我将不得不将其作为更新的 android 版本(api 26 或更高版本)的前台服务。
  • 是的,你是对的。那么,您为什么不以更少的时间尝试 Workmanager(比如从现在开始安排几秒钟)?
  • @HarishJose 我们无法将 Workmanager 设置为运行时间少于 15 分钟

标签: android


【解决方案1】:

WorkManager 2.7.0 引入了加急工作的概念。加急工作立即开始并在几分钟内完成。这里是doc

OneTimeWorkRequestBuilder<T>().apply {
    setInputData(inputData) 
 setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
}.build()

【讨论】:

    【解决方案2】:

    更新: 正确的方法是将你的逻辑与 worker 分离,并根据需要从 worker 或 UI 中调用它。正如 Nurseyit 指出的那样,WM 不适用于即时任务。还有来自android.arch.work:work-runtime-ktxsee docsRxWorker 可以轻松包装Rx 网络请求或外观。

    这可以用作快速修复或编码实验: 您可以通过按钮取消排队的工作并在下一行再次排队。 Work Manager 将尝试尽快启动这个新的 Worker。按下按钮时,应用程序处于前台,因此 Work 很有可能会立即运行。这种方式也不会通过将任务逻辑提取到单独的类、检查 Worker 内的任务实例是否未运行、取消、等待即时任务等而使 Worker 混乱。

    【讨论】:

      【解决方案3】:

      文档说 workManager 仅用于可延迟的任务。所以我们不能指望它立即执行。也许在某些情况下它会立即运行,但不能保证它会一直运行。你应该使用协程或执行器。

      答案如下:

      can I always use WorkManager instead of coroutines?

      https://www.youtube.com/watch?v=pe_yqM16hPQ

      【讨论】:

      • 如果需要每20分钟或固定时间点处理,请尝试使用报警管理器
      【解决方案4】:

      Herehere 是“高级” WorkManager 指南/中型帖子,涵盖了这一点。

      2020 年 7 月,Ben Weiss(Google 的 Android 开发者关系部)said

      我们建议您使用 WorkManager 来执行长时间运行的即时任务。 / 只需确保使用 setForeground/ setForegroundAsync 使其成为前台服务即可。

      这指定 WorkRequest 是长时间运行的或重要的。在这种情况下,WorkManager 会向操作系统提供一个信号,表明在执行此工作时进程应尽可能保持活动状态。

      docs

      对 setForegroundAsync 的调用必须在 ListenableWorker 之前完成 通过返回 ListenableWorker.Result 来表示完成。

      在后台,WorkManager 管理并运行前台服务 您代表您执行此 WorkRequest,显示通知 在 ForegroundInfo 中提供。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-05-30
        相关资源
        最近更新 更多