1

我有一個應用程序小部件可以在接收更新時啓動intentService。Android應用程序小部件 - 使用哪種上下文

我不知道,以更新的Widget使用哪個方面,我應該使用下列條件之一:

  1. 應用程序上下文
  2. 中的AppWidgetProvider收到
  3. 語境
  4. IntentService方面

有時候我有麻煩,更新Widget指令(通過RemoteViews)被忽略。

其他時候,所有的內容都被刪除,除非我刪除widget並重新添加,否則不會再次繪製。

我想了解爲什麼會出現這種問題。

控件已開始通過:

@Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) { 
     Log.d(TAG_PROCESS, " onUpdate "); 

     Intent intent = new Intent(context, UpdateService.class); 
     intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME))); // embed extras so they don't get ignored 
     intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE); 

     context.startService(intent); 

    } 

我通過這些方法更新在IntentService部件:

/** Updates all widgets with the given remoteViews instructions */ 
    protected static void updateAllWidgets(Context context, RemoteViews remoteView){ 
     ComponentName thisWidget = new ComponentName(context, WidgetActivity.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(context); 
     manager.updateAppWidget(thisWidget, remoteView); 
    } 

    /** Update a given widget (id) with the given remoteViews instructions */ 
    protected static void updateWidget(Context context, RemoteViews remoteView, int widgetId){ 
     AppWidgetManager manager = AppWidgetManager.getInstance(context); 
     manager.updateAppWidget(widgetId, remoteView); 
    } 
+0

也許表現出一定的代碼? –

+0

@ci_我添加了一些代碼 – htafoya

回答

0

那麼它似乎方面是沒有問題的。

我使用了服務上下文。

問題是因爲使用manager.updateAppWidget(thisWidget,remoteView);有時會重新繪製所有的小部件,因爲如doc所說,它指定了整個Widget描述。

的解決方案是使用部分更新,因爲我的應用程序插件管理幾個部分更新只有一些顯示的視角:

/** Updates all widgets with the given remoteViews instructions */ 
    protected static void updateAllWidgets(Context context, RemoteViews remoteView){  
     ComponentName thisWidget = new ComponentName(context, WidgetActivity.class); 
     AppWidgetManager manager = AppWidgetManager.getInstance(context); 
     int[] allWidgetIds = manager.getAppWidgetIds(thisWidget); 
     manager.partiallyUpdateAppWidget(allWidgetIds, remoteView); 
    } 

    /** Update a given widget (id) with the given remoteViews instructions */ 
    protected static void updateWidget(Context context, RemoteViews remoteView, int widgetId){ 
     AppWidgetManager manager = AppWidgetManager.getInstance(context); 
     manager.partiallyUpdateAppWidget(widgetId, remoteView); 
    } 
相關問題