3

と を使用してPendingIntentAlarmManagerユーザー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 を明示的にキャンセルしない限り、ガベージ コレクションのためにメモリのどこかに保存されていると仮定するのは正しいでしょうか?

4

1 に答える 1

1

PendingIntent を明示的にキャンセルしない限り、メモリのどこかに保存されていると仮定するのは正しいですか

はい。Android はPendingIntentオブジェクトをキャッシュします。私の知る限り、彼らはプロセスが終了するまでぶらぶらします。

于 2012-10-14T17:21:20.163 に答える