【发布时间】:2019-05-13 00:50:49
【问题描述】:
我正在使用 android.arch.work:work-runtime:1.0.0-alpha12 运行一项且仅一项长时间运行的任务。在旧(慢)设备上,该过程可能需要长达 20 分钟。这是用来启动任务的代码sn-p:
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] 创建一个带有 null 原因的 CancellationException。如果我使用调试器来阻止这个线程完成它的异常,那么第一个线程运行得很好,直到完成。如果我让第二个线程因 CancellationException 而失败,它会尝试再次将长时间运行的任务排入队列,因此我必须在第一个线程仍在处理时防止第二次运行。
有谁知道一个 Worker,或者它使用的 ThreadPoolExecutor,或者其他一些涉及的类是否有这个 10 分钟的线程处理限制,如果有,有没有办法改变它?我一直在查看文档并在创建 CancellationException 的 AbstractFuture 类中设置断点,以及使用的 ThreadPoolExecutor,但看不到设置或使用此超时的位置。仍在寻找:-)
我已经简要查看了 WorkManager 的未解决问题,但没有看到提到此超时。在任何 WorkManager 文档中也没有看到对这样的超时的引用。如果有人可以向我指出有关此问题的解决方案或信息,请提前致谢!
【问题讨论】:
-
this issue 涵盖了 10 分钟限制。
-
谢谢!我打开这个问题120861600 是为了让 CancellationException 的原因在发生这种情况时有用(不是 null)。
标签: android timeout android-workmanager