と を使用してPendingIntent
、AlarmManager
ユーザーBroadcastReceiver
が指定した時間にリマインダーを表示しています。を使用してリマインダーを表示していNotificationManager
ます。
通知が設定される前に、ボタンに「リマインダーを設定」と表示し、通知が設定された後にボタンに「リマインダーを変更」と表示したい。通知がユーザーに表示されるとすぐに、ボタンには再び「リマインダーを設定」と表示されます。
がアクティブPendingIntent
かどうかを確認するために、同じインテント、コンテキスト、および同じ一意の ID (myUniqueId) を使用して同じものを作成しています。PendingIntent
Intent intent = new Intent(context, ReminderReceiver.class);
boolean reminderActive = (PendingIntent.getBroadcast(context, myUniqueId, intent, PendingIntent.FLAG_NO_CREATE) != null);
これで機能し、ボタンのテキストが正しく表示されるようになりました。しかし、通知が表示されるとすぐに、明示的に取得してPendingIntent
キャンセルしない限り、しばらくの間削除されないことがわかりました。そのため、しばらくの間、ボタンには「リマインダーの変更」と表示されたままです。
PendingIntent を明示的にキャンセルしない限り、ガベージ コレクションのためにメモリのどこかに保存されていると仮定するのは正しいでしょうか?