Android 重新启动时AppWidget ID的更改

Android 重新启动时AppWidget ID的更改,android,widget,Android,Widget,和许多其他人一样,我使用AppWidget ID来存储每个小部件的配置。不幸的是,这些ID似乎在两个值之间波动 基本上,在一次示例运行中出现了以下情况: 使用配置活动创建的应用程序小部件 id=70 10秒过去了 id=153 使用Eclipse重新启动/安装新的APK id=70 此后,情况似乎不再发生变化。这可能是什么原因造成的?下面是相关的代码片段,我正在使用AlarmManager从更新服务打印应用程序小部件ID AppWidgetProvider service = PendingIn

和许多其他人一样,我使用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中的OneEnabled()方法,因此请注意放在那里的内容


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

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

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

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

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

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

    还请记住,重新启动后,会再次调用AppWidgetProvider中的OneEnabled()方法,因此请注意放在那里的内容


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

    感谢您确认我的代码正常。我今天再次开始调试,结果证明我的小部件的ID没有改变。问题是,当只有一个小部件时,Android会给出两个小部件ID。我不知道第二个ID来自何处,但它使我的小部件更新服务崩溃,因为没有它的数据。我现在让它忽略这些“坏部件”,问题似乎已经解决了。谢谢你确认我的代码是正确的。我今天再次开始调试,结果证明我的小部件的ID没有改变。问题是,当只有一个小部件时,Android会给出两个小部件ID。我不知道第二个ID来自何处,但它使我的小部件更新服务崩溃,因为没有它的数据。我现在让它忽略这些“坏部件”,问题似乎已经解决了。