私のアプリでは、ユーザの操作で繰り返しアラームが設定されます。 アラームマネージャでブロードキャストに設定された時間間隔を変更することがあります。
余分なものはありません。
この場合、更新フラグまたはキャンセルフラグが良好ですか?あなたがエキストラを使用していない場合FLAG_CANCEL_CURRENTまたはFLAG_UPDATE_CURRENT
おかげ
私のアプリでは、ユーザの操作で繰り返しアラームが設定されます。 アラームマネージャでブロードキャストに設定された時間間隔を変更することがあります。
余分なものはありません。
この場合、更新フラグまたはキャンセルフラグが良好ですか?あなたがエキストラを使用していない場合FLAG_CANCEL_CURRENTまたはFLAG_UPDATE_CURRENT
おかげ
は、あなたがそれらのフラグのいずれかを指定する必要はありません。彼らはシステムがPendingIntent
でエクストラを処理する方法を変更するだけです:(システムPendingIntent
によってキャッシュされた)現在のマッチングのものを置き換えるか、キャンセルして新しいものを作成してください。詳細については、ドキュメントを参照してください。http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_CANCEL_CURRENT
さて、私はそれを得ました...ありがとう! – Dory
彼はCANCELを必要としないので、 'FLAG_UPDATE_CURRENT'が行く方法です。そうでなければ、新しいオブジェクトを作るための不要なオーバーヘッドがあります。 –
さらに、CANCELを使用すると、 'PendingIntent.CanceledException'が発生する可能性があります。 –
アラームを設定する際に使用するPendingIntentsを使用してください。別の時間にアラームを再スケジュールする場合は、フラグを一切必要としません。フラグが0の重複したPendingIntentを作成し、それを使用してアラームを設定()します。これにより、暗黙的に既存のアラームが取り消され、新しく指定された時刻に設定されます。ただし、新しいPendingIntentを作成したときにFLAG_CANCEL_CURRENTを使用した場合、アラームマネージャは、現在キャンセルされているPendingIntentと同じ「それ」であることを認識し、古いものをぶら下げ、およびCPU。私はこのバグ・ラックを使って、文字通り何百もの古いアラームをシステムに入れたアプリを見てきました。十分なパフォーマンスとメモリ使用量になるでしょう。
実際に既存のアラームを再スケジュールせずにエキストラを変更したい場合は、それがFLAG_UPDATE_CURRENTの対象です。再スケジュールする場合は、フラグをまったく使用しないでください。
「エクストラの意味ではあまり意味がありません」とは何ですか?あなたはエキストラを使っているのですか? –
いいえ私はエキストラを使用していません.. – Dory
FLAG_CANCEL_CURRENTを使用しているときにSamsung Lollipopに問題があることをご確認ください。 http://stackoverflow.com/questions/29344971/java-lang-securityexception-too-many-alarms-500-registered-from-pid-10790-u – Elye