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

Gal*_*e33 5 java android android-widget android-appwidget

在我的 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);
Run Code Online (Sandbox Code Playgroud)

但实际上,我只需要改变一件事,那就是 TextView Text。

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

 view.setTextViewText(R.id.nick,wParameters.getNick()); 
 appWidgetManager.updateAppWidget(appWidgetId, views);
Run Code Online (Sandbox Code Playgroud)

再次?

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

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

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

很高兴得到任何帮助和想法!感谢先进,加尔。

Com*_*are 2

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

然后只需更改“TextView 文本”即可。

AFAIK,只要您保持相同的布局 ID,如果您不想,则无需更新布局中的每个小部件。但是,您有责任始终了解应用程序小部件之前是否已渲染,这可能会很棘手。因此,每次更新每个小部件通常会更简单。

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

不。

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

不。

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

IntentService然后在由您启动的中执行工作AppWidgetProvider,就好像它那么昂贵一样,您不想在主应用程序线程上执行该工作。