和许多其他人一样,我使用AppWidget ID来存储每个小部件的配置。不幸的是,这些ID似乎在两个值之间波动。
基本上,以下情况似乎发生在样本运行中:
- 使用配置活动创建的应用程序小部件
- id=70
- 10秒通过
- id=153
- 使用Eclipse重新启动/安装新的APK
- 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()方法,所以要小心放在那里的内容。
注意:我使用的函数和逻辑与您在代码中使用的相同。