[Android] PendingIntentでRequestCodeの指定をミスって古い情報を参照してしまう

 PendingIntentのリクエストコードとフラグを適当に設定してたら、古いPendingIntentを参照する不具合がおきました。

 どういう現象かと原因・解決策について書きます。

どういう現象か?


 requestCodeを重複させて、flagにてきとーな値を入れると前の情報が残ってしまうということです。

 以下、再現手順です。

  1. RequestCodeが0、フラグをUPDATE_CURRENTにしたPendingIntent(A)を設定・発火
  2. Notificationに、Activityを起動させるRequestCodeが0、フラグを0のPendingIntent(B)を設定
  3. NotificationをタップしてActivityを起動
  4. ActivityでgetIntentすると、Intentから1.で設定したPendingIntent(A)のExtraを取得できてしまう

原因・解決策


 PendingIntentはRequestCodeが同じだと再利用されるため、このような不具合が起きました。

 今回の例のようなAとBが全く別の処理の時は、リクエストコードは一意なものにすることで新たに生成するようにしましょう。

 場合によると思いますが、フラグもPendingIntent.FLAG_UPDATE_CURRENTにして古いIntentを上書きするべきかと思います。

 とりあえずドキュメントも何も読まずとりあえずテキトーな値入れるのは危険かなと思います。

コメントを残す

メールアドレスが公開されることはありません。