AppWidgetProvider - 每次对任何 AppWidget 文件进行更改时都会触发 onUpdate 吗?
Posted
技术标签:
【中文标题】AppWidgetProvider - 每次对任何 AppWidget 文件进行更改时都会触发 onUpdate 吗?【英文标题】:AppWidgetProvider - Is onUpdate triggered every time a change has been made to any of the AppWidget files? 【发布时间】:2018-10-09 05:06:51 【问题描述】:我想知道onUpdate
方法。我知道第一次将小部件放置在主屏幕上时调用它,然后在我在 appwidget info xml 文件中定义的时间段内调用它。
但似乎每当我对AppWidgetProvider
类进行更改时,也会调用此方法,即。添加或删除方法。这个观察正确吗?我不明白这如何触发onUpdate
方法?
public class ExampleAppWidgetProvider extends AppWidgetProvider
@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds)
for (int appWidgetId : appWidgetIds)
Intent intent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE);
String buttonText = prefs.getString(KEY_BUTTON_TEXT + appWidgetId, "Press me");
RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_widget);
views.setOnClickPendingIntent(R.id.example_widget_button, pendingIntent);
views.setCharSequence(R.id.example_widget_button, "setText", buttonText);
Bundle appWidgetOptions = appWidgetManager.getAppWidgetOptions(appWidgetId);
resizeWidget(appWidgetOptions, views);
appWidgetManager.updateAppWidget(appWidgetId, views);
【问题讨论】:
【参考方案1】:但似乎每当我对我的 AppWidgetProvider 类进行更改时也会调用此方法,即。添加或删除方法
此处的行为可能取决于主屏幕或其他应用小部件宿主的实现。但是,是的,如果您安装不同版本的应用程序(包括开发期间的更改),则可能会调用您的 onUpdate()
方法。
我不明白这如何触发 onUpdate 方法?
嗯,android 是一个操作系统。它知道应用程序何时安装和更新。当应用程序小部件提供程序的 APK 更改时,我可以看到通过 onProviderChanged()
通知 AppWidgetHost
的位置。 AppWidgetManager
后面的操作系统代码也可能发送广播以使 AppWidgetProvider
传递新的 RemoteViews
是相当合理的。或者,当使用onProviderChanged()
调用主屏幕时,它本身可能能够请求刷新。
【讨论】:
感谢您的回答!我觉得这很有趣。我进一步测试了它,这一定是真的,因为它甚至会在我添加另一个空行时触发。对不起,我问了两次这个问题,我完全忘记了。以上是关于AppWidgetProvider - 每次对任何 AppWidget 文件进行更改时都会触发 onUpdate 吗?的主要内容,如果未能解决你的问题,请参考以下文章
桌面小部件Wight父类AppWidgetProvider的三个方法
扩展 AppWidgetProvider 的 Widget 中是不是可以使用 TextView Marquee?
是否可以在 appWidget 中重用 RemoteViews 而不是每次都创建新的?我该如何存储它们?