Android WorkManager:问题 JobServiceContext:执行时客户端超时

Android WorkManager: Issue JobServiceContext: Client timed out while executing

我们正在使用 2.1.0 版本的 WorkManager。

implementation "androidx.work:work-runtime:2.1.0"

当我们运行 一个负责从网络导入数据并插入到本地 sqlite 的服务时,大约需要 15 分钟。但 10 分钟后,我们从系统中得到低于错误。

2 2567-2567/? I/JobServiceContext: Client timed out while executing (no jobFinished received). sending onStop. com.xxxx/androidx.work.impl.background.systemjob.SystemJobService jId=353, u0
08-05 16:58:10.467 29795-29858/com.xxxx I/WM-WorkerWrapper: Work [ id=5e29ca91-fa5a-4d08-838f-01db64522f4a, tags={ com.xxx.xxxSync, RWORK_XXX_SYNC } ] was cancelled
    java.util.concurrent.CancellationException: Task was cancelled.
        at androidx.work.impl.utils.futures.AbstractFuture.cancellationExceptionWithCause(AbstractFuture.java:1184)
        at androidx.work.impl.utils.futures.AbstractFuture.getDoneValue(AbstractFuture.java:514)
        at androidx.work.impl.utils.futures.AbstractFuture.get(AbstractFuture.java:475)
        at androidx.work.impl.WorkerWrapper.run(WorkerWrapper.java:284)
        at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:75)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
        at java.lang.Thread.run(Thread.java:818)

但真正发生的是后台服务仍在继续下载并插入到数据库中。

有什么办法可以手动增加超时时间吗?

Is there any way to increase the time out manually?

无法更改超时时间,对于较长的运行任务,最好分工并链接。

您可以将条目分成块,甚至让它们并行执行,这甚至可以提高性能。

但是, 对于运行 15 分钟的操作,将其置于后台并不是一个好主意。 它也会消耗大量的网络资源和电池电量。您的用户可能希望 cancel/pause 操作或随时查看进度。

前台服务更好,因为它会保持 运行 只要通知可见并且您的用户可以看到任务的进度并可以与之交互。

JobScheduler 要求您在 10 分钟内完成执行。您可以拆分您的 WorkRequest 和链,然后使用 WorkContinuation。查看 WorkManager.beginWith API 的变体以获取更多信息。

例如

https://developer.android.com/reference/androidx/work/WorkManager.html#beginWith(java.util.List%3Candroidx.work.OneTimeWorkRequest%3E)