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

时间:2010-07-14 13:37:13

标签: 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
   } 
}

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

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

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

2 个答案:

答案 0 :(得分:6)

AppWidgetProviderBroadcastReceiver的子类。引用BroadcastReceiver documentation

  

仅限BroadcastReceiver对象   在通话期间有效   onReceive(Context,Intent)。一旦你的   代码从这个函数返回,   系统认为对象是   已完成,不再有效。

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

答案 1 :(得分:0)

AppWidgetManager仅创建一次。为每个创建的AppWidget创建AppWidgetProvider