Android WorkManager 10-минутное время ожидания потока откуда-то - PullRequest
0 голосов
/ 12 декабря 2018

Я использую android.arch.work:work-runtime:1.0.0-alpha12 для запуска одной и только одной длительной задачи.Процесс может занять до 20 минут на старом (медленном) устройстве.Вот фрагмент кода, используемый для запуска задачи:

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

Для справочной информации databaseWork получает зашифрованный zip-файл, расшифровывает его, а затем использует содержимое для восстановления группы таблиц в базе данных SqlCipher.Если база данных велика, это может занять некоторое время

В одном случае задача выполняется в потоке [pool-1-thread-1,5, main], и, насколько я могу судить, ровно через 10 минут(600 секунд) по истечении времени Thread [pool-2-thread-1,5, main] создает исключение CancellationException с нулевой причиной.Если я использую отладчик, чтобы остановить этот поток от завершения с его исключением, то первый поток работает нормально до завершения.Если я позволю второму потоку завершиться с ошибкой с его CancellationException, он попытается снова поставить в очередь долгосрочную задачу, поэтому мне придется защищаться от второго запуска, пока первый поток все еще обрабатывает.

Кто-нибудь знает, еслиWorker, или ThreadPoolExecutor, который он использует, или какой-либо другой задействованный класс имеет этот 10-минутный предел обработки потоков, и если да, есть ли способ изменить его?Я смотрел на документ и устанавливал точки останова в классе AbstractFuture, который создает исключение CancellationException, а также используемый ThreadPoolExecutor и не может видеть, где этот тайм-аут устанавливается или используется.Тем не менее все еще смотрю: -)

Я кратко рассмотрел открытые проблемы для WorkManager и не упомянул об этом тайм-ауте.Также не видел ссылки на тайм-аут, как это ни в одном из документов WorkManager.Если кто-то может указать мне решение или информацию об этом, заранее спасибо!

1 Ответ

0 голосов
/ 12 декабря 2018

Кто-нибудь знает, имеет ли Worker, или ThreadPoolExecutor, который он использует, или какой-либо другой участвующий класс, этот 10-минутный лимит обработки потоков, который имеет

JobScheduler и WorkManager делегатовна JobScheduler на устройствах Android 5.0+.

и если да, есть ли способ изменить его?

Не напрямую.

Если выразбейте свою работу на более мелкие куски и объедините их в цепочку, используя WorkManager, вы можете выполнить всю работу, хотя, возможно, с задержками между кусками.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...