Как правильно обновить коллекцию в пользовательском интерфейсе виджета на Android 8.0 (уровень API 26+)? - PullRequest
0 голосов
/ 12 ноября 2018

История на данный момент:

У меня есть два виджета главного экрана Android для поддержки, и я недавно обновил хост-приложение для поддержки Android 8.0 (targetSdkVersion 26).Очевидно, что долго работающие сервисы, которые использовались для обновления виджетов, в какой-то момент были убиты системой Android, поэтому в качестве временного исправления я пометил сервисы как ForegroundService, показав соответствующее уведомление пользователю.Однако в настоящее время я ищу способ оптимизировать это и найти решение, которое менее заметно для пользователя.

Один из виджетов, которые я уже исправил.Он не использует никакие коллекции как часть своего представления, поэтому он не полагается на RemoteViewsService / RemoteView.Мне удалось исправить процесс обновления с помощью JobIntentService (и AlarmManager, который все равно уже использовались виджетами).

Проблема:

IОднако мне трудно исправить другой виджет, который использует коллекцию (ListView) в своем пользовательском интерфейсе.Я попытался обойти использование RemoteViewsService / RemoteView и добавить свои RemoteViews напрямую, подобно тому, как я делаю это в другом виджете.Но тогда я просто получаю ошибки загрузки, и виджет показывает некоторый запасной интерфейс.

Официальная документация по виджетам также по-прежнему описывает RemoteViewsService / RemoteViewsFactory как обязательный при работе с коллекциями в виджетах: https://developer.android.com/guide/topics/appwidgets/

Этот другой вопрос StackOverflow заканчивается вопросом, предлагающим прекратить использование RemoteViewsService, нообсуждение ничего не говорит о том, как продолжать поддерживать коллекции: Как обеспечить, чтобы RemoteViewsService запускался в фоновом режиме в Oreo?

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

Мой вопрос:

  • Официально рекомендуется обновлять коллекцию (например, ListView) в виджете Android на Android 8.0 / targetSdkVersion 26, чтобы использовать RemoteViewsService и пометить его как службу переднего плана?

  • Если нет,как еще можно обновить коллекцию (например, ListView) в виджете Android на Android 8.0 / targetSdkVersion 26?

...