2

私はPendingIntentAlarmManagerを使って目覚まし時計のアプリを作っています。 PendingIntentをキャンセルするには、それを正確に再作成する必要があります。私のアプリでは、他の多くの目覚まし時計アプリと同様に、各アラームのオン/オフを切り替えるスイッチ付きのアラームのリストがあります。オフに切り替えたときに、私は現在、PendingIntentを再作成し、以下を使用してそれをキャンセル:PendingIntentをオブジェクトに格納して後でアラームをキャンセルするのは悪い習慣ですか?

Intent intent = new Intent(context, MyBroadcastReceiver.class); 
String id = this.getId().replaceAll("[^0-9]+", ""); 
PendingIntent alarmIntent = PendingIntent.getBroadcast(context, id, intent, 0); 
alarmIntent.cancel(); 

私は信じて上記のコードの最初の3行は不要です。私がアラームを切り替えると、私はidの他にも多くのアラームの詳細を含むカスタムアラームオブジェクトにアクセスできます。新しいアラームを作成しているときに、新しく作成されたPendingIntentをアラームオブジェクトに格納すると、アラームを作成するために使用されたPendingIntentにアクセスでき、次のように1行で取り消すことができます。

this.getPendingIntent().cancel(); 

私は意図を再作成したり、IDを取得したり、以前のコードからPendingIntentを再作成する必要はありません。

1)PendingIntentをオブジェクトに格納して、それを再作成するのではなく後で使用すると何か問題はありますか?いいえ。それは簡単な答えのようですが、私はこれまで誰も見ていません。

2)私が気づいていないPendingIntentを再作成する利点はありますか?

ありがとうございます!

答えて

2

PendingIntentをオブジェクトに格納して後で再作成するのに問題はありますか?

基礎となるIntentは、いくつかの大規模なペイロードを持っていないと仮定すると(例えば、余分でBitmap)、あなたはOKでなければなりません。

これは簡単な回答のようですが、私はこれまで誰も見ていません。

https://github.com/commonsguy/cw-omnibus/tree/v8.7/AlarmManager/Simpleですが、これは簡単な例ですが、

私が気づいていないPendingIntentを再作成する利点はありますか?

PendingIntentがない場合に機能します。あなたのプロセスは永遠に生きていません。最適化としてキャッシュPendingIntentを使用したい場合は、それは問題ありませんが、必要に応じてPendingIntentを作成する必要があります。

+0

助けてくれてありがとう!だから誰かにメッセージを伝える方法がわからないのですが、私の他の質問を見ることができます:https://stackoverflow.com/questions/45381092/how-to-stop-alarm-from-executing-after-pendingintent-has-受け取ったアンドロイド – Michael

関連する問題