我在android中写了几个小部件,但有一件事总让我好奇。在onUpdate()方法中,我们循环遍历所有小部件ID,并且它说可以有多个小部件处于活动状态,因此更新所有小部件。但为什么我们必须从这样的一个小部件更新其他小部件?
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
// There may be multiple widgets active, so update all of them
for (appWidgetId in appWidgetIds) {
updateAppWidget(context, appWidgetManager, appWidgetId)
}
}
每个小部件都有自己的广播版,每个小部件都可以自行运行。为什么我们必须从另一个小部件调用更新?
如果这是一个非常简单的逻辑,请轻易提出我的问题。
答案 0 :(得分:1)
每个小部件都有自己的广播转发器
不,它没有。
首先,AppWidgetProvider
类处理该提供程序提供的所有应用程序小部件。如果用户创建该应用小部件的多个实例(例如,多个城市的天气预报),则所有这些实例都会由该单个AppWidgetProvider
类更新。
其次,AppWidgetProvider
的单个实例用于单个onUpdate()
调用。这是因为AppWidgetProvider
是BroadcastReceiver
的子类,onUpdate()
由onReceive()
触发,并且清单注册的BroadcastReceiver
每{{1}获取一个唯一实例调用。