gpt4 book ai didi

Android WorkManager 10 分钟线程超时来自某处

转载 作者:太空狗 更新时间:2023-10-29 13:46:19 24 4
gpt4 key购买 nike

我正在使用 android.arch.work:work-runtime:1.0.0-alpha12 来运行一项且仅一项长时间运行的任务。在旧(慢)设备上,该过程最多可能需要 20 分钟。这是用于启动任务的代码 fragment :

        OneTimeWorkRequest databaseWork =
new OneTimeWorkRequest.Builder(DatabaseWorker.class)
.build();
WorkManager.getInstance().enqueue(databaseWork);

关于背景信息,databaseWork 正在检索一个加密的 zip 文件,对其进行解密,然后使用内容来恢复 SqlCipher 数据库中的一堆表。如果数据库很大,这可能需要一段时间

在一个实例中,任务在线程 [pool-1-thread-1,5,main] 上运行,据我所知,在运行时间刚好 10 分钟(600 秒)时,线程 [pool-2 -thread-1,5,main] 创建一个具有空原因的 CancellationException。如果我使用调试器阻止该线程完成并出现异常,那么第一个线程将正常运行直至完成。如果我让第二个线程因 CancellationException 而失败,它会尝试再次将长时间运行的任务加入队列,因此我必须在第一个线程仍在处理时防止第二次运行。

有谁知道 Worker、它使用的 ThreadPoolExecutor 或其他相关类是否有 10 分钟的线程处理限制,如果有,有没有办法改变它?我一直在查看文档并在创建 CancellationException 的 AbstractFuture 类中设置断点,以及使用的 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 委托(delegate)给 Android 5.0+ 设备上的 JobScheduler

and if so is there a way to change it?

不直接。

如果您将工作分解成更小的 block 并使用 WorkManager 将它们链接起来,您可能能够完成所有工作,尽管 block 之间可能会有延迟。

关于Android WorkManager 10 分钟线程超时来自某处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53734165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com