为什么每次添加app小部件时都会创建AppWidgetProvider?

dim*_*suz 2 android widget android-widget

我对android的AppWidget机器如何工作感到困惑.

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

public class MyProvider extends AppWidgetProvider {

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

   public void onUpdate(..., int[] appWidgetIds) {
      // updating stuff here
   } 
}
Run Code Online (Sandbox Code Playgroud)

从我在文档中读到的内容,我了解AppWidgetProvider实例化一次,当第一次添加该类型的widget时.如果添加了相同类型的另一个窗口小部件,则它将由该提供者进行管理.

但我刚刚发现事实并非如此!

对于我添加的每个小部件,android创建一个新的MyProvider(我从'adb logcat'看到它 - 它为每个小部件打印"Creating ...")!我没有理解为什么:)也许我弄错了?或者文档不清楚.如果每个提供商只管理一个小部件,那么将appWidgetIds传递给onUpdate和其他方法的原因是什么?

Com*_*are 6

AppWidgetProvider是.的子类BroadcastReceiver.引用BroadcastReceiver文档:

BroadcastReceiver对象仅在对onReceive(Context,Intent)的调用期间有效.一旦您的代码从此函数返回,系统将认为该对象已完成且不再处于活动状态.

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