是否可以在 appWidget 中重用 RemoteViews 而不是每次都创建新的?我该如何存储它们?

Posted

技术标签:

【中文标题】是否可以在 appWidget 中重用 RemoteViews 而不是每次都创建新的?我该如何存储它们?【英文标题】:Is it possible to reuse RemoteViews in an appWidget instead of creating new ones every time? and how can I store them? 【发布时间】:2012-01-30 03:48:36 【问题描述】:

在我的 appWidgetProvider 中,每次我需要更新 appWidget 时,我都必须创建新的 RemoteViews 对象并为其分配属性:

RemoteViews views = new RemoteViews(context.getPackageName(),layout);
views.setOnClickPendingIntent(R.id.widgetLayout, pendingIntent);
view.setFloat(R.id.nick, "setTextSize", wParameters.getFontSize()); 
view.setTextViewText(R.id.nick,wParameters.getNick()); 
.........etc

appWidgetManager.updateAppWidget(appWidgetId, views);

但实际上,我只需要更改一件事,就是 TextView 文本。

我能否以某种方式存储 RemoteViews 以便在下次更新时重复使用它,并且只是应用

 view.setTextViewText(R.id.nick,wParameters.getNick()); 
 appWidgetManager.updateAppWidget(appWidgetId, views);

再来一次?

或者以某种方式获取之前使用的 RemoteViews 对象?

我想实现这一点,因为在我的 appWidget 中再次设置新的 RemoteViews 对象属性的过程非常昂贵。

假设我的小部件由 TextView 和 ImageView 组成。 ImageView 的图像是在小部件的 configureActivity 中选择的(对于 appWidget 的每个实例都是唯一的),但图像处理成本很高。 每次更新都需要更改 TextView 文本。 我想保持 ImageView 图像原样,只更改 TextView 的文本。是否可以在不更新 imageView 的情况下更新 TextView?

很高兴得到任何帮助和想法! 谢谢你,Gal。

【问题讨论】:

【参考方案1】:

但实际上,我只需要更改一件事,就是 TextView 文本。

然后只更改“TextView 文本”。

AFAIK,只要您保持相同的布局 ID,如果您不想更新布局中的每个小部件,您就不需要更新。但是,您有责任始终知道该应用小部件之前是否已呈现,这可能会变得很棘手。因此,每次更新每个小部件通常更简单。

我能否以某种方式存储 RemoteView 以便在下次更新时重复使用它

没有。

或者以某种方式获取之前使用的 RemoteViews 对象?

没有。

我想实现这一点,因为在我的 appWidget 中再次设置新的 RemoteViews 对象属性的过程非常昂贵。

然后在AppWidgetProvider 启动的IntentService 中完成工作,好像它很昂贵,你不想在主应用程序线程上完成这项工作。

【讨论】:

我不能只更改“TextView 文本”。假设我的小部件由 TextView 和 ImageView 组成。 ImageView 的图像是恒定的,并在小部件的 configureActivity 中选择(对于 appWidget 的每个实例都是唯一的)。 (图像处理是昂贵的部分)。每次更新都需要更改 TextView 文本。我想保持 ImageView 图像原样,只更改 TextView 的文本。是否可以在不更新 imageView 的情况下更新 TextView? 从API11开始有一个函数:appWidgetManager.PartiallyUpdateAppWidget(appWidgetId, views);我正在尝试为 API8 实现相同的效果。 @GalDude33:“图像处理是昂贵的部分”——这就是为什么您需要将修改后的图像保存在文件中并通过ContentProvider 将其提供给应用程序小部件主机.毕竟,人们确实会重新启动手机,并且根据您的描述,当他们重新启动手机时,他们会失去形象。保存图像后,不会在每次更新时都进行图像处理,因此更新变得便宜。话虽如此,partiallyUpdateAppWidget() 的存在表明我最初的评估可能不正确,对此我深表歉意。

以上是关于是否可以在 appWidget 中重用 RemoteViews 而不是每次都创建新的?我该如何存储它们?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确更新 AppWidget?

AppWidget每分钟更新一次

remot debug

Android:在创建时配置 Appwidget 大小

是否可以在 Kotlin Anko 中重用布局

在 appwidget 中调整自定义视图大小的问题,无法确定 android 上的实际大小 appwidget,尤其是在平板电脑上