Какая разница для обновления Android App Widget между двумя подходами? - PullRequest
5 голосов
/ 20 января 2011

Я читал в интернете / книге пример о виджете приложения, нормальный пример обновления виджета в onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) методе AppWidgetProvider, подобном этому:

final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
 int appWidgetId = appWidgetIds[i];
 RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout);
 updateViews.setTextViewText(R.id.mytext, "updated text");

 appWidgetManager.updateAppWidget(appWidgetId, updateViews);    
}

Обновляет каждый виджет в цикле.

Но теперь я должен реализовать виджет приложения, он обновляется в BroadcastReceiver, метод onReceive(Context context, Intent intent), так как нет переданных int [] appWidgetIds. Поэтому я реализовал код следующим образом:

RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout);
updateViews.setTextViewText(R.id.mytext, "updated text");

ComponentName myComponentName = new ComponentName(context, AndroidBatteryWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myComponentName, updateViews);

Он не обновлял виджеты один за другим, но фактически все виджеты обновлялись одновременно. Хотя это работало так, как я хочу, но я запутался, почему нет необходимости обновлять все виджеты один за другим, как раньше.

В чем разница между двумя методами?

Можно ли отправить еще одну трансляцию с BroadcastReceiver.onReceive() для запуска AppWidgetProvider.onUpdate()? И как?

1 Ответ

0 голосов
/ 08 июня 2012

Это то же самое. Обновление с помощью ComponentName проходит по всем идентификаторам, как ваш первый блок кода.

Вы можете увидеть это в коде Android здесь:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.4_r1.2/com/android/server/AppWidgetService.java#AppWidgetService.updateAppWidgetProvider%28android.content.ComponentName%2Candroid.widget.RemoteViews%29

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...