PendingIntentのリクエストコードとフラグを適当に設定してたら、古いPendingIntentを参照する不具合がおきました。
どういう現象かと原因・解決策について書きます。
目次
どういう現象か?
requestCodeを重複させて、flagにてきとーな値を入れると前の情報が残ってしまうということです。
以下、再現手順です。
- RequestCodeが0、フラグをUPDATE_CURRENTにしたPendingIntent(A)を設定・発火
- Notificationに、Activityを起動させるRequestCodeが0、フラグを0のPendingIntent(B)を設定
- NotificationをタップしてActivityを起動
- ActivityでgetIntentすると、Intentから1.で設定したPendingIntent(A)のExtraを取得できてしまう
原因・解決策
PendingIntentはRequestCodeが同じだと再利用されるため、このような不具合が起きました。
今回の例のようなAとBが全く別の処理の時は、リクエストコードは一意なものにすることで新たに生成するようにしましょう。
場合によると思いますが、フラグもPendingIntent.FLAG_UPDATE_CURRENTにして古いIntentを上書きするべきかと思います。
とりあえずドキュメントも何も読まずとりあえずテキトーな値入れるのは危険かなと思います。