我们使用的是2.1.0 Workmanager版本。
implementation "androidx.work:work-runtime:2.1.0"
当我们运行一项服务,该服务负责从Web导入数据并插入本地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$2.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)
但实际上发生的是背景服务仍在继续下载并插入数据库。
有什么方法可以手动增加时间?
有什么方法可以手动增加时间?
无法更改超时时间,对于长期运行的任务,最好将工作分开并链接。
您可以将条目分为块,甚至使它们并行执行,甚至可能会提高性能。
但是,对于运行15分钟的操作,将其放置在后台上不是一个好主意。它将消耗大量网络资源和电池电量。您的用户可能需要取消/暂停操作或随时查看进度。
前景服务更好,因为只要可见通知,并且用户可以看到任务的进度并可以与之交互。
JobScheduler
要求您在10
分钟内完成执行。您可以使用WorkContinuation
分开WorkRequest
s和链条。查看WorkManager.beginWith
API的变体以获取更多信息。
例如,例如
https://developer.android.com/reference/androidx/work/workmanager.html#beginwith(java.util.list.list%3candroidx.work.ontimework.onemethwork.ontimeworkrequest%3E(