Задания Workmanager перестают работать или не завершаются с третьей или четвертой попыткиAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Задания Workmanager перестают работать или не завершаются с третьей или четвертой попытки

Сообщение Anonymous »


Мой английский не очень хорош, так что простите меня, у меня уже несколько дней возникает небольшая проблема. Работа, которую я делаю с WorkManager, я использую для хранения данных в фоновом режиме, и когда задача выполнена, приложение уведомляет меня. Проблема в том, что при четвертом или третьем запуске задания оно перестает работать, вы можете остановить его вручную, но оно так и не завершится. Я прилагаю свой код, который помогал мне создавать, выполнять и видеть статус Работы.

частный void sincronizar() { Log.d("Сообщение ::","Синкронизандо"); менеджер = WorkManager.getInstance(getActivity()); Manager.enqueueUniqueWork("startW",ExistingWorkPolicy.KEEP,startWork); пытаться { Thread.sleep(1000); } catch (InterruptedException e) { е.printStackTrace(); } viewModel.setLoading(истина); viewModel.setRegistroSync(тег); целая сумма = 0; если (cbCobros.isChecked()) { Manager.enqueueUniqueWork("cobroW", ExistingWorkPolicy.KEEP,cobroWork); сумма++; } если (cbPedidos.isChecked()) { Manager.enqueueUniqueWork("pedidoW", ExistingWorkPolicy.KEEP,pedidoWork); сумма++; } если (cbEmpresas.isChecked()) { Manager.enqueueUniqueWork("empresaW", ExistingWorkPolicy.KEEP,empresaWork); сумма++; } если (cbMonedas.isChecked()) { Manager.enqueueUniqueWork("monedaW", ExistingWorkPolicy.KEEP,monedaWork); сумма++; } если (cbDocumentos.isChecked()) { Manager.enqueueUniqueWork("documentoW", ExistingWorkPolicy.KEEP,documentoWork); сумма++; } если (cbPerfil.isChecked()) { Manager.enqueueUniqueWork("perfilW", ExistingWorkPolicy.KEEP,perfilWork); сумма++; } если (cbCatalogo.isChecked()) { Manager.enqueueUniqueWork("catalogoW", ExistingWorkPolicy.KEEP,catalogoWork); сумма++; } если (cbDatosempresa.isChecked()) { Manager.enqueueUniqueWork("datosW", ExistingWorkPolicy.KEEP,datosWork); сумма++; } если (cbConfig.isChecked()) { Manager.enqueueUniqueWork("configW", ExistingWorkPolicy.KEEP,configWork); сумма++; } если (cbVisitas.isChecked()) { Manager.enqueueUniqueWork("visitaW", ExistingWorkPolicy.KEEP,visitaWorker); сумма++; } если (cbCotizaciones.isChecked()) { Manager.enqueueUniqueWork("cotizacionW", ExistingWorkPolicy.KEEP,cotizacionWork); сумма++; } если (cbSurtir.isChecked()) { Manager.enqueueUniqueWork("surtirW", ExistingWorkPolicy.KEEP,surtirWork); сумма++; } если (cbEntrega.isChecked()) { Manager.enqueueUniqueWork("entregaW", ExistingWorkPolicy.KEEP,entregaWork); сумма++; } если (cbFacturas.isChecked()) { Manager.enqueueUniqueWork("facturaW", ExistingWorkPolicy.KEEP,facturaWork); сумма++; } если (cbClientes.isChecked()) { Manager.enqueueUniqueWork("clienteW", ExistingWorkPolicy.KEEP,clientWork); сумма++; } если (cbArticulo.isChecked()) { Manager.enqueueUniqueWork("articuloW", ExistingWorkPolicy.KEEP,articuloWork); сумма++; } если (cbFormasPago.isChecked()) { менеджер.enqueueUniqueWork("formasPagoW", ExistingWorkPolicy.KEEP,formasPagoWork); сумма++; } если (cbVentas.isChecked()) { Manager.enqueueUniqueWork("ventasW", ExistingWorkPolicy.KEEP,ventasWork); сумма++; } если (cbCajas.isChecked()) { Manager.enqueueUniqueWork("cajasW", ExistingWorkPolicy.KEEP,cajasWork); сумма++; } tvProgress.setText("Синкронизандо..."); если (сумма == 0) { viewModel.setLoading(ложь); viewModel.updateRegistroSync(тег); } еще{ tvCancelar.setVisibility(View.VISIBLE); } AtomicInteger sumW = новый AtomicInteger(); менеджер.getWorkInfosByTagLiveData(тег) .observe(getViewLifecycleOwner(), workInfos -> { если (workInfos!= ноль) { int count = workInfos.size(); sumW.set(0); workInfos.forEach(workInfo -> { Log.d("Сообщение :::", "Работа: " + workInfo.getTags() + ", State: " + workInfo.getState()); if(workInfo.getState() == WorkInfo.State.SUCCEEDED) { sumW.getAndIncrement(); } Log.d("Сообщение :::","sum: " + sumW.intValue() + ", count: " + счет); если (sumW.intValue() == счетчик) { ПолучитьИнформациюРегистрирован(); viewModel.setLoading(ложь); tvProgress.setText("Полная синхронизация"); менеджер.enqueue(finishWork); WorkerUtils.makeSuccessNotification("Полная синхронизация", getActivity()); менеджер.pruneWork(); } }); workInfos.stream().forEach(workInfo -> { Прогресс данных = workInfo.getProgress(); int value = Progress.getInt("ПРОГРЕСС", 0); если (значение > 0) { pbLoading.setVisibility(View.VISIBLE); pbLoading.setProgress((int) значение,истина); } }); } }); } Если в моей логике есть ошибки, сообщите мне, я новичок в разработке для Android.

Я уже пытался очистить его с помощью команды manager.pruneWork() , но эта ошибка продолжает возникать независимо от наличия команды.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»