Android 为什么每次添加应用程序小部件时都会创建AppWidgetProvider?

Android 为什么每次添加应用程序小部件时都会创建AppWidgetProvider?,android,widget,android-widget,Android,Widget,Android Widget,我对android的AppWidget机器是如何工作的有点困惑 我重新实现了AppWidgetProvider的构造函数,如下所示: public class MyProvider extends AppWidgetProvider { public MyProvider() { Log.d("TEST", "Creating...") } public void onUpdate(..., int[] appWidgetIds) { // updat

我对android的AppWidget机器是如何工作的有点困惑

我重新实现了AppWidgetProvider的构造函数,如下所示:

public class MyProvider extends AppWidgetProvider {

   public MyProvider() {
     Log.d("TEST", "Creating...")
   }

   public void onUpdate(..., int[] appWidgetIds) {
      // updating stuff here
   } 
}
从我在文档中读到的内容,我了解到AppWidgetProvider在第一次添加该类型的小部件时被实例化一次。如果添加了另一个相同类型的小部件,它将完全由该提供者管理

但我发现事实并非如此

对于我添加的每个小部件,android都会创建一个新的MyProvider(我从“adb logcat”中可以看到它会为每个小部件打印“创建…”)! 我不明白为什么:) 也许我做错了什么?或者文件不清楚。
如果每个提供程序只管理一个小部件,那么将AppWidgetId传递给onUpdate和其他方法的原因是什么?

只创建一次。将为创建的每个AppWidget创建一个。AppWidgetProvider是BroadcastReceiver的子类。引述:

BroadcastReceiver对象仅为 在调用的持续时间内有效 onReceive(上下文、意图)。一旦你 代码从此函数返回 系统认为对象是 已完成且不再活动


因此,
AppWidgetProviders
是一次性的,应该这样对待。每个应用程序小部件操作(更新等)都将导致创建、使用和丢弃提供程序。

我相信AppWidgetManager实例化一次后,将为添加的小部件的每个实例创建AppWidgetProvider。在文档中,你看到应用程序小部件提供程序只创建了一次吗?我在那里找不到该信息?我只是假设,因为我看到了appWidgetIds参数:)我想“如果它总是等于1,那么有什么意义呢?”。非常感谢。也可以看到下面的答案,男人们确实是对的。谢谢你的解释!