Я сталкиваюсь с проблемой с Workmanager, когда обновления прогресса не отправляются последовательно от работника Coroutine, даже если я правильно звоню SetProgress. Полем Например, Fileuplaodsatte находится в процессе файла, затем завершенное состояние. Завершенное состояние иногда не отправляет зачем? Также когда -то, когда прогресс в файле составляет 80 процентов после того, как я обновляю 100%, тогда мгновенно файл завершается состоянием, 100% состояние пропускается. Завершенное состояние обновляется зачем? < /P>
private suspend fun updateUploadState(messageId: Long, state: FileUploadState) {
try {
if (!isStopped) {
withContext(Dispatchers.IO) {
setProgress(
workDataOf(
"messageId" to messageId,
"state" to serializeFileUploadState(state)
)
)
}
}
} catch (_: IllegalStateException) { }
}
< /code>
Я читаю прогресс с помощью < /p>
val workInfoList by WorkManager.getInstance(context)
.getWorkInfosFlow(WorkQuery.fromUniqueWorkNames("visual_media_upload_${viewModel.chatId}_${message.id}"))
.collectAsState(null)
LaunchedEffect(workInfoList) {
// Find the relevant work and retrieve the messageId and state
workInfoList?.firstOrNull()?.let { workInfo ->
val workerState = workInfo.state // WorkInfo state is important here
if (workerState == WorkInfo.State.CANCELLED) {
CoroutineScope(Dispatchers.IO).launch {
viewModel.repository.updateMessage(
message.id,
ChatMessageStatus.QUEUED_MEDIA_RETRY
)
}
} else {
val progressMessageId = workInfo.progress.getLong("messageId", -1)
val state = workInfo.progress.getString("state")
Log.e(TAG,"UI state: $state")
if (progressMessageId != -1L && state != null) {
viewModel.updateUploadState(
progressMessageId,
deserializeFileUploadState(state)
)
}
}
}
}
< /code>
Журналы: 100% (загруженный размер 127784) не обновлен, даже я отправляю 100% < /p>
2025-01-30 16:34:54.553 22955-22955 UI state: null
2025-01-30 16:34:54.557 22955-22955 UI state: null
2025-01-30 16:34:54.764 22955-22955 UI state: {"type":"com.super6.pot.ui.chat.viewmodels.FileUploadState.Started"}
2025-01-30 16:34:57.022 22955-22955 UI state: {"type":"com.super6.pot.ui.chat.viewmodels.FileUploadState.InProgress","uploadedSize":127784}
Progress: 76%, File Size: 166203, Uploaded: 127784
2025-01-30 16:34:57.519 22955-22955 UI state: {"type":"com.super6.pot.ui.chat.viewmodels.FileUploadState.Completed"}
Подробнее здесь: https://stackoverflow.com/questions/793 ... orkmanager
Работник Coroutine иногда не обновляет прогресс с SetProgress в Workmanager ⇐ Android
Форум для тех, кто программирует под Android
1738235312
Anonymous
Я сталкиваюсь с проблемой с Workmanager, когда обновления прогресса не отправляются последовательно от работника Coroutine, даже если я правильно звоню SetProgress. Полем Например, Fileuplaodsatte находится в процессе файла, затем завершенное состояние. Завершенное состояние иногда не отправляет зачем? Также когда -то, когда прогресс в файле составляет 80 процентов после того, как я обновляю 100%, тогда мгновенно файл завершается состоянием, 100% состояние пропускается. Завершенное состояние обновляется зачем? < /P>
private suspend fun updateUploadState(messageId: Long, state: FileUploadState) {
try {
if (!isStopped) {
withContext(Dispatchers.IO) {
setProgress(
workDataOf(
"messageId" to messageId,
"state" to serializeFileUploadState(state)
)
)
}
}
} catch (_: IllegalStateException) { }
}
< /code>
Я читаю прогресс с помощью < /p>
val workInfoList by WorkManager.getInstance(context)
.getWorkInfosFlow(WorkQuery.fromUniqueWorkNames("visual_media_upload_${viewModel.chatId}_${message.id}"))
.collectAsState(null)
LaunchedEffect(workInfoList) {
// Find the relevant work and retrieve the messageId and state
workInfoList?.firstOrNull()?.let { workInfo ->
val workerState = workInfo.state // WorkInfo state is important here
if (workerState == WorkInfo.State.CANCELLED) {
CoroutineScope(Dispatchers.IO).launch {
viewModel.repository.updateMessage(
message.id,
ChatMessageStatus.QUEUED_MEDIA_RETRY
)
}
} else {
val progressMessageId = workInfo.progress.getLong("messageId", -1)
val state = workInfo.progress.getString("state")
Log.e(TAG,"UI state: $state")
if (progressMessageId != -1L && state != null) {
viewModel.updateUploadState(
progressMessageId,
deserializeFileUploadState(state)
)
}
}
}
}
< /code>
Журналы: 100% (загруженный размер 127784) не обновлен, даже я отправляю 100% < /p>
2025-01-30 16:34:54.553 22955-22955 UI state: null
2025-01-30 16:34:54.557 22955-22955 UI state: null
2025-01-30 16:34:54.764 22955-22955 UI state: {"type":"com.super6.pot.ui.chat.viewmodels.FileUploadState.Started"}
2025-01-30 16:34:57.022 22955-22955 UI state: {"type":"com.super6.pot.ui.chat.viewmodels.FileUploadState.InProgress","uploadedSize":127784}
Progress: 76%, File Size: 166203, Uploaded: 127784
2025-01-30 16:34:57.519 22955-22955 UI state: {"type":"com.super6.pot.ui.chat.viewmodels.FileUploadState.Completed"}
Подробнее здесь: [url]https://stackoverflow.com/questions/79399658/coroutine-worker-not-updating-progress-sometimes-with-setprogress-in-workmanager[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия