AppWidgetProvider - запускается ли onUpdate каждый раз, когда вносится изменение в любой из файлов AppWidget? - PullRequest
0 голосов
/ 28 апреля 2018

Меня интересует метод onUpdate. Я знаю, что он вызывается при первом размещении виджета на homescree, а затем в течение периода времени, который я определил в XML-файле информации appwidget. Но кажется, что этот метод также вызывается всякий раз, когда я делаю изменения в моем AppWidgetProvider классе, т.е. добавление или удаление метода. Это наблюдение правильно? Я не понимаю, как это вызывает метод onUpdate?

public class ExampleAppWidgetProvider extends AppWidgetProvider {

@Override
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
    for (int appWidgetId : appWidgetIds) {
        Intent intent = new Intent(context, MainActivity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);

        SharedPreferences prefs = context.getSharedPreferences(SHARED_PREFS, Context.MODE_PRIVATE);
        String buttonText = prefs.getString(KEY_BUTTON_TEXT + appWidgetId, "Press me");

        RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.example_widget);
        views.setOnClickPendingIntent(R.id.example_widget_button, pendingIntent);
        views.setCharSequence(R.id.example_widget_button, "setText", buttonText);

        Bundle appWidgetOptions = appWidgetManager.getAppWidgetOptions(appWidgetId);
        resizeWidget(appWidgetOptions, views);

        appWidgetManager.updateAppWidget(appWidgetId, views);
    }
}

1 Ответ

0 голосов
/ 28 апреля 2018

Но кажется, что этот метод также вызывается всякий раз, когда я делаю изменения в своем классе AppWidgetProvider, т.е. добавление или удаление метод

Поведение здесь может зависеть от реализации главного экрана или другого хоста виджета приложения. Однако, да, ваш метод onUpdate() может быть вызван, если вы устанавливаете другую версию своего приложения, которая включает изменения в процессе разработки.

Я не понимаю, как это вызывает метод onUpdate?

Ну, Android - это операционная система. Он знает, когда приложения устанавливаются и обновляются. Я вижу, где AppWidgetHost уведомляется через onProviderChanged(), когда изменяется APK для провайдера виджетов приложения. Вполне разумно, что код ОС, стоящий за AppWidgetManager, может также отправлять широковещательную рассылку, чтобы заставить AppWidgetProvider доставить свежий RemoteViews. Или сам домашний экран может запрашивать обновление, когда он вызывается с помощью onProviderChanged().

...