1

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

基本上,示例运行似乎发生了以下情况:

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

在那之后,它似乎不再改变。这可能是什么原因造成的?相关的代码片段如下,我正在从使用AlarmManager.

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);
4

1 回答 1

1

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

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

此行为是否还会影响您的应用程序性能和预期行为?如果没有,那就没什么好担心的了。

我在开发小部件时遇到了同样的事情,一旦我开始工作,我的小部件的 id 从 0,1 开始......现在我的小部件的 id 为 100,但它们总是在应用程序所在的会话中获得唯一的 id安装。

如果用户卸载应用程序并重新安装它,您不应该关心 ids 是否会重复它们。

另请记住,重新启动后,您会再次调用 AppWidgetProvider 的 onEnabled() 方法,因此请小心放在那里的内容。

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

于 2013-08-08T15:57:25.487 回答