Неправильный PendingIntent запускается после нажатия клавиши home


У меня есть два (или более) виджета, например A и B, которые должны запускать одно и то же действие, передавая их appWidgetId в Intent экстры к действию. Это прекрасно работает после установки приложения при первом запуске из любого виджета (действие получает правильный appWidgetId). Он также отлично работает, если я нажимаю кнопку назад после запуска активности и запускаю активность из другого виджета. Однако, если я запускаю действие из виджета A, нажмите кнопку home, а затем запустите действие из виджета B (или C, или D...) он запускается с помощью A appWidgetId. Я не знаю, как это исправить. Вот как я объявляю свой PendingIntent:

Intent intent = new Intent(context, WidgetActivity.class);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
intent.setAction(this.getClass().getName() + System.currentTimeMillis());
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 
                                         PendingIntent.FLAG_UPDATE_CURRENT);

Если я правильно понимаю, я успешно настраиваю уникальные PendingIntents для каждого виджета. Любая помощь очень ценится!

EDIT : Принятый ответ на Этот вопрос предполагает, что:

Я считаю, что проблема в том, что у вас есть PendingIntent, который отличается только дополнительным. PendingIntents кэшируются, так что если вы используете два с одинаковыми действиями и данными, они будут перезаписывать друг друга.

Однако мой код создает рандомизированные действия для выполнения, и поэтому я думаю, что мои PendingIntents отличаются не только дополнительными функциями

1 3

1 ответ:

Похоже, мне нужно освежить события жизненного цикла моей деятельности. Ответом был следующий код, введенный в мою деятельность:

@Override
protected void onNewIntent(Intent intent) {
    setIntent(intent);
    super.onNewIntent(intent);
}
Проблема заключалась в том, что при нажатии кнопки Home действие удерживалось на исходном Intent, который запустил его. Затем, когда другой виджет запускал действие, исходное намерение использовалось повторно. Приведенный выше код просто заменяет первоначальное намерение новым и продолжает работу с оставшимися событиями жизненного цикла.