AppWidgetProvider - 每次对任何AppWidget文件进行更改时是否触发onUpdate?

问题描述 投票:0回答:1

我想知道onUpdate方法。我知道它是第一次将小部件放在homescree上,然后是我在appwidget info xml文件中定义的时间段。但是当我改变我的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);
    }
}
android android-widget android-appwidget appwidgetprovider
1个回答
0
投票

但是,每当我对AppWidgetProvider类进行更改时,似乎也会调用此方法。添加或删除方法

此处的行为可能取决于主屏幕或其他应用程序窗口小部件主机的实现。但是,是的,如果您安装了不同版本的应用程序,可能会调用您的onUpdate()方法,其中包括开发期间的更改。

我不明白这是如何触发onUpdate方法的?

嗯,Android是一个操作系统。它知道应用程序何时安装和更新。当应用程序小部件提供程序的APK发生变化时,我可以通过AppWidgetHost看到通知onProviderChanged()的位置。 AppWidgetManager背后的操作系统代码也可能发送广播以让AppWidgetProvider提供新鲜的RemoteViews是相当合理的。或者,当使用onProviderChanged()调用主屏幕时,主屏幕本身可能会请求刷新。

© www.soinside.com 2019 - 2024. All rights reserved.