Запуск задачи WorkManager из AppWidgetProvider приводит к бесконечным вызовам onUpdate.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Запуск задачи WorkManager из AppWidgetProvider приводит к бесконечным вызовам onUpdate.

Сообщение Anonymous »

Я пытаюсь создать виджет, и, как указано в этом руководстве,

…Если процесс настройки виджета может занять несколько секунд (возможно, во время работы в Интернете запросы) и вам необходимо, чтобы ваш процесс продолжался, рассмотрите возможность запуска задачи с помощью WorkManager в методе onUpdate().

Но путем постановки рабочих запросов в очередь изнутри onUpdate, я получаю бесконечные вызовы onUpdate примерно каждые полсекунды с одним и тем же намерением. Я пробовал обновить виджет с помощью goAsync() и GlobalScope.launch для моего сетевого запроса, и он работает нормально. Однако рекомендуется выполнять работу ввода-вывода с помощью API WorkManager, и это то, что я пытаюсь сделать.
Я создал виджет приложения с помощью Новый -> Шаблон меню Виджет -> Виджет приложения, и я пытаюсь поставить работу в очередь следующим образом:

Код: Выделить всё

class NewAppWidget : AppWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager,appWidgetIds: IntArray) {
val inputData = Data.Builder().putIntArray("ids", appWidgetIds).build()
val workRequest = OneTimeWorkRequestBuilder().setInputData(inputData).build()
WorkManager.getInstance(context.applicationContext).enqueue(workRequest)
}
}
Рабочий:

Код: Выделить всё

class WidgetUpdateWorker(ctx: Context, params: WorkerParameters) : CoroutineWorker(ctx, params) {
override suspend fun doWork(): Result {
val appWidgetIds = inputData.getIntArray("ids")
val appWidgetManager = AppWidgetManager.getInstance(applicationContext)
delay(200L) // Simulate network call. The behavior is the same with Retrofit and a real network call
appWidgetIds?.forEach { id ->
val views = RemoteViews(applicationContext.packageName, R.layout.new_app_widget)
views.setTextViewText(R.id.appwidget_text, "Setting text from worker")
appWidgetManager.updateAppWidget(id, views)
}
return Result.success()
}
}
Информация о виджете приложения в формате XML: В результате я получаю постоянно мигающий и обновляющийся виджет на рабочем столе. Такое происходит и на эмуляторе, и на реальном устройстве.
Что я делаю не так? Я ориентируюсь на API 30 и использую версию WorkManager androidx.work:work-runtime-ktx:2.6.0

Подробнее здесь: https://stackoverflow.com/questions/706 ... update-cal
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как сделать вызов API внутри AppWidgetProvider — Android
    Anonymous » » в форуме Android
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous
  • Пользовательский WorkManager WorkManager с контекстом
    Anonymous » » в форуме Android
    0 Ответы
    33 Просмотры
    Последнее сообщение Anonymous
  • Пользовательская инициализация WorkManager жалуется на WorkManager#initialize
    Anonymous » » в форуме JAVA
    0 Ответы
    44 Просмотры
    Последнее сообщение Anonymous
  • Пользовательская инициализация WorkManager жалуется на WorkManager#initialize
    Anonymous » » в форуме Android
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous
  • Пользовательская инициализация WorkManager жалуется на WorkManager#initialize
    Anonymous » » в форуме Android
    0 Ответы
    35 Просмотры
    Последнее сообщение Anonymous

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