如何在Android 8.0(API级别26+)上的小部件UI中正确更新集合?

时间:2018-11-12 14:18:43

标签: android android-widget android-8.0-oreo remoteview

到目前为止的故事:

我有两个要维护的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小部件会更新吗?

0 个答案:

没有答案