当 Android 小部件 RemoteViewService 被销毁时

Posted

技术标签:

【中文标题】当 Android 小部件 RemoteViewService 被销毁时【英文标题】:When Android widget RemoteViewService gets destroyed 【发布时间】:2015-10-23 01:58:29 【问题描述】:

我正在处理包含ListView 作为集合的Widget。我创建了RemoteViewService 的具体实现并实现onGetViewFactory() 方法以提供RemoteViewsService.RemoteViewsFactory 具体实现。

我使用以下代码将服务设置为RemoteView

Intent intent= new Intent();
intent.setAction("remote_service");
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, widgetId);
intent.setData(Uri.parse(serviceIntent.toUri(Intent.URI_INTENT_SCHEME)));
remoteViews.setRemoteAdapter(R.id.widget_list, intent);

我将 List 对象保存在 RemoteViewFactory 的具体实现中。

查询步骤:

在主屏幕上放置了小部件。 这会导致创建 RemoteViewFactory。 将设备置于睡眠模式。 现在将 RemoteViewService 破坏导致 RemoteViewFactory 垃圾收集的具体实现,因此List<String> 对象销毁。

请推荐?

【问题讨论】:

【参考方案1】:

RemoteViewsServiceAppWidgetProvider 一样,不会永远存在。您的RemoteViewsService 在其onGetViewFactory() 方法中应该返回您的RemoteViewsFactory 的一个新实例。 RemoteViewsFactory 所需的任何数据都需要持久化(例如,SQLiteDatabase)并根据需要进行检索。

【讨论】:

感谢 CommonsWare 确认 RemoteViewService 可以随时被操作系统破坏。我将更改实现以将数据持久保存在 SQLite 数据库中

以上是关于当 Android 小部件 RemoteViewService 被销毁时的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Android 中的 RemoteViews 中删除小部件?

《android开发艺术探索》读书笔记--RemoteViews

小部件更新的 RemoteViews 超出最大位图内存使用错误

Android appwidget remoteviews没有更新

Android在小部件内获取textView值

如何处理 Android 中远程视图的异常(自定义小部件或自定义通知)?