java – 是否有可能在appWidget中重用RemoteViews而不是每次都创建新的?以及如何存储它们?

在我的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 Text.

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

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

再次?

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

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

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

对任何帮助和想法都会感到高兴!
                        谢谢先进,Gal.

最佳答案

But in fact, I only need to change one thing which is the TextView Text.

然后只更改“TextView文本”.

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

Can I somehow store the RemoteViews for reusing it on the next update

没有.

Or get the previously used RemoteViews object somehow?

没有.

I want to achieve this because the process of setting the new RemoteViews object properties again is very expensive in my appWidget.

然后在你的AppWidgetProvider启动IntentService中的工作,好像它是那么昂贵,你不想在主应用程序线程上做这项工作.

点赞