【问题标题】:AppWidget ID changes on reboot重新启动时 AppWidget ID 更改
【发布时间】:2013-08-08 15:28:32
【问题描述】:

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

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

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

在那之后它似乎不再改变。这可能是什么原因造成的?相关代码 sn-ps 如下,我正在从更新服务中打印应用小部件 ID,并使用 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);

【问题讨论】:

    标签: android widget


    【解决方案1】:

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

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

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

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

    如果用户卸载应用并重新安装,您不应该关心这些 id 是否会重复。

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

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

    【讨论】:

    • 感谢您确认我的代码没有问题。我今天再次开始调试,结果我的小部件的 ID 没有改变。问题是,当只有一个小部件时,Android 会给出 2 个小部件 ID。我不知道第二个 ID 来自哪里,但它使我的小部件更新服务崩溃,因为它没有数据。我现在让它忽略了这些“坏小部件”,问题似乎已经解决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    相关资源
    最近更新 更多