到目前为止的故事:
我有两个要维护的Android主屏幕小部件,最近我更新了主机应用程序以支持Android 8.0(targetSdkVersion 26)。显然,用于更新窗口小部件的长期运行服务有时会被Android系统杀死,因此,作为一项临时修复程序,我将这些服务标记为ForegroundService,向用户显示了相应的通知。但是,我目前正在寻找一种优化方法,以找到用户看不见的解决方案。
我已经修复的小部件之一。它不使用任何集合作为其视图的一部分,因此它不依赖于RemoteViewsService / RemoteView。我能够在JobIntentService(和AlarmManager,这些小部件一直在使用的状态)的帮助下修复更新过程。
问题:
但是,我很难修复另一个在其UI中使用集合(ListView)的小部件。我试图绕过RemoteViewsService / RemoteView的用法并直接添加RemoteViews,这与我在其他小部件中的用法类似。但是,然后我仅遇到加载错误,并且该小部件显示了一些后备UI。
在小部件中使用集合时,官方小部件文档还仍然将RemoteViewsService / RemoteViewsFactory描述为必需项: https://developer.android.com/guide/topics/appwidgets/
另一个StackOverflow问题以提问者建议停止使用RemoteViewsService的方式结束,但是讨论并未说明如何继续支持集合: How to ensure RemoteViewsService is run in the background in Oreo?
我觉得有点奇怪,因为有一种方法可以避免一个小部件的前台通知,而不得不依赖于另一个小部件的前台通知,这取决于小部件UI的结构。我希望Google提供类似RemoteViewsJobIntentService的功能,但是似乎没有类似的功能。
我的问题:
更新收藏集是否是官方的最佳做法(例如 Android 8.0 / targetSdkVersion上的Android小部件中的ListView) 26使用RemoteViewsService并将其标记为前台服务?
如果不是,那么Android中的集合(例如ListView)还可以如何 8.0 / targetSdkVersion 26上的Windows小部件会更新吗?