2011-12-17 90 views
3

我有一个关于AppWidgetProvider的问题。当手机启动时,AppWidgetProvideronUpdate()方法连续调用四次,全部包含相同的appWidgetId。我无法弄清楚为什么会发生。有人有线索吗?AppWidgetProvider,onUpdate在开始时被调用几次

我得到的,它扩展了 super classessuper classesMainMainScroll,并且four classes(widgets)两种类型。

例部件

public class WidgetMedium extends Main { 

    public void onReceive(Context context, Intent intent) { 
     super.onReceive(context, intent); 
    } 

} 

清单

 <receiver android:name=".activity.Main"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
    </receiver> 

    <receiver android:name=".activity.MainScroll"> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter>  
    </receiver> 

    <receiver android:name=".activity.WidgetMedium" 
     android:label="Swedroid Widget 4x3" 
     android:icon="@drawable/widget_application"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_provider_medium" /> 
    </receiver> 

    <receiver android:name=".activity.WidgetScrollMedium" 
     android:label="Swedroid Widget 4x3 Scroll" 
     android:icon="@drawable/widget_application"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_scroll_provider_medium" /> 
    </receiver> 

    <receiver android:name=".activity.WidgetLarge" 
     android:label="Swedroid Widget 4x4" 
     android:icon="@drawable/widget_application"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_provider" /> 
    </receiver> 

    <receiver android:name="com.swedroid.widget.activity.WidgetScrollLarge" 
     android:label="Swedroid Widget 4x4 Scroll" 
     android:icon="@drawable/widget_application"> 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
     <intent-filter> 
      <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
     </intent-filter> 
     <meta-data 
      android:name="android.appwidget.provider" 
      android:resource="@xml/widget_scroll_provider_large" /> 
    </receiver> 
+0

你能从你的AppWidgetProvider的onUpdate方法发布代码吗?可能是您正在循环部件并更新每个部件。 – ekatz 2011-12-17 19:15:03

+0

onUpdate方法非常简单,我遍历小部件并为它们中的每一个启动一个IntentService。它不应该导致这种问题。 – user634545 2011-12-17 20:37:52

回答

0

我认为在你的情况下,所有四个接收器是活动的,他们都收到同样的意图来更新你的widget。您可以在您的应用程序中添加您创建更新意向的代码吗?

1

如果MainMainScroll类是唯一的超级类我的东西,他们不应该AppWidgetProviders而是abstract类,因此,在清单不需要为他们receiver定义。

另外我认为其他四个reciever定义不需要以下intent-filter

<intent-filter> 
    <action android:name="android.intent.action.MAIN" /> 
    <category android:name="android.intent.category.LAUNCHER" /> 
</intent-filter> 
相关问题