web-dev-qa-db-ja.com

FLAG_CANCEL_CURRENTまたはFLAG_UPDATE_CURRENT

私のアプリは、ユーザーの操作に繰り返しアラームを設定します。アラームマネージャーでブロードキャストに設定された間隔時間が変更される場合があります。
エキストラの邪魔になるものはあまりありません。
この場合、更新フラグまたはキャンセルフラグの方が優れていますか?

ありがとう

10
Dory

エクストラを使用していない場合は、これらのフラグを指定する必要はありません。これらは、システムがエクストラをPendingIntentで処理する方法を変更するだけです。現在のマッチング(システムPendingIntentによってキャッシュされます)のエクストラを置き換えるか、キャンセルして新しいものを作成します。詳細については、ドキュメントを参照してください: http://developer.Android.com/reference/Android/app/PendingIntent.html#FLAG_CANCEL_CURRENT

15
Nikolay Elenkov

決してアラームを設定するときに使用するPendingIntentsでFLAG_CANCEL_CURRENTを使用します。別の時間にアラームを再スケジュールする場合は、フラグはまったく必要ありません。フラグがゼロの重複するPendingIntentを作成し、それを使用してアラームをset()します。これにより、既存のアラームが暗黙的にキャンセルされ、新しく指定された時間に設定されます。ただし、新しいPendingIntentを作成したときにFLAG_CANCEL_CURRENTを使用した場合、Alarm Managerは、現在キャンセルされているPendingIntentと「同じ」であると認識できなくなり、古いものがぶら下がって配信不能になり、メモリを消費してしまいます。とCPU。このバグのあるアプリは、システム内で文字通り何百もの古いアラームを発生させ、パフォーマンスとメモリ使用量に大きな打撃を与えるのを見てきました。

既存のアラームを実際に再スケジュールせずにエクストラを変更したいだけの場合は、それがFLAG_UPDATE_CURRENTの目的です。スケジュールを変更する場合は、フラグをまったく使用しないでください。

13
ctate