AppWidget ID在重新启动时更改



和许多其他人一样,我使用AppWidget ID来存储每个小部件的配置。不幸的是,这些ID似乎在两个值之间波动。

基本上,以下情况似乎发生在样本运行中:

  1. 使用配置活动创建的应用程序小部件
  2. id=70
  3. 10秒通过
  4. id=153
  5. 使用Eclipse重新启动/安装新的APK
  6. id=70

在那之后,它似乎不再改变。是什么原因造成的?下面是相关的代码片段,我正在打印使用AlarmManager调度的更新服务中的应用程序小部件ID。

AppWidgetProvider

service = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);

配置活动

Bundle extras = getIntent().getExtras();
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
ComponentName widget = new ComponentName(getPackageName(), WidgetConfigActivity.class.getName());
int[] widgetIds = widgetManager.getAppWidgetIds(widget);
// Store the configuration for this widget
SharedPreferences.Editor prefsEdit = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit();
// Some settings here
prefsEdit.commit();
// Send initial update request
Intent initialUpdate = new Intent(this, WidgetProvider.class);
initialUpdate.setAction("android.appwidget.action.APPWIDGET_UPDATE");
initialUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds);
sendBroadcast(initialUpdate);

如果您尝试以下操作会发生什么:安装应用程序,放置2个小部件,重新启动,放置另一个小部件并检查其id?

当你从主屏幕上删除小部件并卸载应用程序时,一些ID会被重置,这可能是重复出现ID的原因。

此外,这种行为是否会影响您的应用程序性能和预期行为?如果没有,就没有什么可担心的。

我在开发小部件时也经历过同样的事情,一旦我开始工作,我的小部件的ID从0,1开始……现在我的小组件的ID为100,但它们在安装应用程序的会话中总是获得唯一的ID。

如果用户卸载应用程序并再次安装,你不应该在意id是否会重复它们。

还要记住,重新启动后,会再次调用AppWidgetProvider中的onEnabled()方法,所以要小心放在那里的内容。

注意:我使用的函数和逻辑与您在代码中使用的相同。

相关内容

最新更新