2012-12-25 21 views
6

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

おかげ

+0

「エクストラの意味ではあまり意味がありません」とは何ですか?あなたはエキストラを使っているのですか? –

+0

いいえ私はエキストラを使用していません.. – Dory

+0

FLAG_CANCEL_CURRENTを使用しているときにSamsung Lollipopに問題があることをご確認ください。 http://stackoverflow.com/questions/29344971/java-lang-securityexception-too-many-alarms-500-registered-from-pid-10790-u – Elye

答えて

11

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

+0

さて、私はそれを得ました...ありがとう! – Dory

+0

彼はCANCELを必要としないので、 'FLAG_UPDATE_CURRENT'が行く方法です。そうでなければ、新しいオブジェクトを作るための不要なオーバーヘッドがあります。 –

+0

さらに、CANCELを使用すると、 'PendingIntent.CanceledException'が発生する可能性があります。 –

6

アラームを設定する際に使用するPendingIntentsを使用してください。別の時間にアラームを再スケジュールする場合は、フラグを一切必要としません。フラグが0の重複したPendingIntentを作成し、それを使用してアラームを設定()します。これにより、暗黙的に既存のアラームが取り消され、新しく指定された時刻に設定されます。ただし、新しいPendingIntentを作成したときにFLAG_CANCEL_CURRENTを使用した場合、アラームマネージャは、現在キャンセルされているPendingIntentと同じ「それ」であることを認識し、古いものをぶら下げ、およびCPU。私はこのバグ・ラックを使って、文字通り何百もの古いアラームをシステムに入れたアプリを見てきました。十分なパフォーマンスとメモリ使用量になるでしょう。

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

関連する問題