How to properly update a collection in a widget UI on Android 8.0 (API level 26+)?

Viewed 316

The story so far:

I have two Android Home Screen widgets to mainain and I recently updated the host App to support Android 8.0 (targetSdkVersion 26). Obviously, the long-running services, which were used to update the widgets, got killed by the Android system at some point, so as an interim fix, I flagged the services as ForegroundService, showing a corresponding notification to the user. I'm currently looking for a way to optimize this, however, and find a solution that is less visible to the user.

One of the widgets I already fixed. It does not use any collections as part of its view, therefore it does not rely on RemoteViewsService/RemoteView. I was able to fix the update process with the help of a JobIntentService (and AlarmManager, which the widgets had already been using anyway).

The problem:

I'm having a hard time, however, to fix the other widget, which uses a collection (ListView) in its UI. I tried to bypass the usage of RemoteViewsService/RemoteView and add my RemoteViews directly, similar to how I do it in the other widget. But then I simply get loading errors and the widget shows some fallback UI.

The official widget documentation also still describes RemoteViewsService/RemoteViewsFactory as mandatory when working with collections in widgets: https://developer.android.com/guide/topics/appwidgets/

This other StackOverflow question ends with the questioner suggesting to stop using RemoteViewsService, but the discussion says nothing about how to continue to support collections: How to ensure RemoteViewsService is run in the background in Oreo?

I find it a bit weird that there would be a way to avoid foreground notifications for one widget but to have to rely on them for another, depending on the structure of the widget's UI. I would expect Google to provide something like a RemoteViewsJobIntentService, but there doesn't seem to be anything like that.

My question:

  • Is it the officially best practice to update a collection (e.g. ListView) in an Android widget on Android 8.0 / targetSdkVersion 26 to use RemoteViewsService and flagging it as a foreground service?

  • If not, how else can a collection (e.g. ListView) in an Android widget on Android 8.0 / targetSdkVersion 26 be updated?

0 Answers
Related