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 的变体以获取更多信息。
例如
我们正在使用 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 的变体以获取更多信息。
例如