Android WorkManager 10 分钟线程超时来自某处
Android WorkManager 10 minute thread timeout coming from somewhere
我正在使用 android.arch.work:work-运行time:1.0.0-alpha12 来 运行 一项也是唯一一项长期 运行ning 任务。在旧(慢)设备上,该过程最多可能需要 20 分钟。这是用于启动任务的代码片段:
OneTimeWorkRequest databaseWork =
new OneTimeWorkRequest.Builder(DatabaseWorker.class)
.build();
WorkManager.getInstance().enqueue(databaseWork);
关于背景信息,databaseWork 正在检索一个加密的 zip 文件,对其进行解密,然后使用其中的内容来恢复 SqlCipher 数据库中的一组表。如果数据库很大,这可能需要一段时间
在一个实例中,任务在线程 [pool-1-thread-1,5,main] 上 运行ning,据我所知,刚好在 10 分钟(600 秒)过去了一次,Thread [pool-2-thread-1,5,main] 创建了一个带有 null 原因的 CancellationException。如果我使用调试器阻止该线程完成异常,那么第一个线程 运行 就可以完成。如果我让第二个线程因 CancellationException 而失败,它会再次尝试将 long-运行ning 任务排入队列,因此我必须在第一个线程仍在处理时防御第二个 运行。
有谁知道 Worker、它使用的 ThreadPoolExecutor 或其他一些相关 class 是否有 10 分钟的线程处理限制,如果有,有没有办法改变它?我一直在查看文档并在创建 CancellationException 的 AbstractFuture class 中设置断点,以及使用的 ThreadPoolExecutor,但看不到设置或使用此超时的位置。不过还在看:-)
我已简要查看了 WorkManager 的未解决问题,但没有看到提及此超时。在任何 WorkManager 文档中也没有看到像这样的超时参考。如果有人可以指出我的解决方案或相关信息,请提前致谢!
Does anyone know if a Worker, or the ThreadPoolExecutor it uses, or some other involved class has this 10 minute thread processing limit
JobScheduler
执行,WorkManager
委托给 Android 5.0+ 设备上的 JobScheduler
。
and if so is there a way to change it?
不直接。
如果您将工作分解成更小的块并使用 WorkManager
将它们链接起来,您也许能够完成所有工作,尽管块之间可能会有延迟。
我正在使用 android.arch.work:work-运行time:1.0.0-alpha12 来 运行 一项也是唯一一项长期 运行ning 任务。在旧(慢)设备上,该过程最多可能需要 20 分钟。这是用于启动任务的代码片段:
OneTimeWorkRequest databaseWork =
new OneTimeWorkRequest.Builder(DatabaseWorker.class)
.build();
WorkManager.getInstance().enqueue(databaseWork);
关于背景信息,databaseWork 正在检索一个加密的 zip 文件,对其进行解密,然后使用其中的内容来恢复 SqlCipher 数据库中的一组表。如果数据库很大,这可能需要一段时间
在一个实例中,任务在线程 [pool-1-thread-1,5,main] 上 运行ning,据我所知,刚好在 10 分钟(600 秒)过去了一次,Thread [pool-2-thread-1,5,main] 创建了一个带有 null 原因的 CancellationException。如果我使用调试器阻止该线程完成异常,那么第一个线程 运行 就可以完成。如果我让第二个线程因 CancellationException 而失败,它会再次尝试将 long-运行ning 任务排入队列,因此我必须在第一个线程仍在处理时防御第二个 运行。
有谁知道 Worker、它使用的 ThreadPoolExecutor 或其他一些相关 class 是否有 10 分钟的线程处理限制,如果有,有没有办法改变它?我一直在查看文档并在创建 CancellationException 的 AbstractFuture class 中设置断点,以及使用的 ThreadPoolExecutor,但看不到设置或使用此超时的位置。不过还在看:-)
我已简要查看了 WorkManager 的未解决问题,但没有看到提及此超时。在任何 WorkManager 文档中也没有看到像这样的超时参考。如果有人可以指出我的解决方案或相关信息,请提前致谢!
Does anyone know if a Worker, or the ThreadPoolExecutor it uses, or some other involved class has this 10 minute thread processing limit
JobScheduler
执行,WorkManager
委托给 Android 5.0+ 设备上的 JobScheduler
。
and if so is there a way to change it?
不直接。
如果您将工作分解成更小的块并使用 WorkManager
将它们链接起来,您也许能够完成所有工作,尽管块之间可能会有延迟。