web-dev-qa-db-ja.com

AlarmManagerのsetRepeatingとsetInexactRepeatingの違い

以下のパラメーターは何ですか?

alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                AlarmManager.INTERVAL_FIFTEEN_MINUTES, alarmIntent);

そして次の:

alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY, alarmIntent);

違いは何ですか?また、機能の面で2つの違いは何ですか?

26
User3

どちらの例も、指定されたalarmIntentを送信する繰り返しアラームをスケジュールします。どちらの場合も、最初に送信されるのは即時です(calendar.getTimeInMillis()現在の時刻 を返します)。どちらの場合も、アラームを送信する必要があるときにデバイスが起動されます(AlarmManager.RTC_WAKEUP)。

これらの呼び出しには2つの違いがあります。簡単な方法は、最初の呼び出しでは15分ごとに、2番目の呼び出しでは毎日(3番目のパラメーターでわかるように)意図が送信されることです。より複雑な違いは、関数呼び出し自体です。setRepeatingは、15分ごとにexactlyの最初のアラームをスケジュールします。 setInexactRepeatingは、24時間ごとにおよその2番目のアラームをスケジュールします。これは、その間隔から逸脱する可能性があることを意味します。 。

これはAPI 19で変更されていることに注意してください。これらの2つの呼び出しは同義です。 このガイド 、および このAPIドキュメント を参照してください。

35
PaF

アラームの精度を決定します

アラームの種類を選択することは、多くの場合、アラームを作成する最初のステップです。さらに区別できるのは、アラームをどの程度正確にする必要があるかです。

ほとんどのアプリでは、setInexactRepeating()が正しい選択です。この方法を使用すると、Androidは複数の不正確な繰り返しアラームを同期し、それらを同時に起動します。これにより、バッテリーの消耗が減少します。

例として厳格な時間要件を持つまれなアプリの場合、アラームは午後4時に正確に起動する必要があります。毎日setRepeating()を使用します。

参照: アラームの精度を決定します

16
Mehul Joisar

以前の回答を補強するために、繰り返しアラーム、特にsetInexactRepeating()を使用して要求される不正確なアラームを使用する際に考慮すべきその他のベストプラクティスがいくつかあります。

アラームタイプ

  • 電源管理の観点から、非ウェイクアップアラームはウェイクアップアラームよりも優れています。前者を使用すると、アラームが遅れて発動する場合がありますが、ユーザーがデバイスを起動したとき、または別のウェイクアップアラームが発動したときにも発動します。 WAKEUPアラームを使用すると、デバイスのスリープ状態が解除され、追加のバッテリーが消費され、他の不正確なアラームが発火する可能性があります。
  • RTCタイムベースではなくELAPSEDタイムベースを使用するアラームを優先します。前者は、RTCアラームよりもデバイス間でよりランダムな分布を持つ可能性が高く、アラームが何らかのポーリングをトリガーしている場合、ネットワークの輻輳のリスクとサーバー上で。Gingerbread(またはそれ以上)を実行している携帯電話にはバグがあり、RTC不正確なアラームはリアルタイムクロック、たとえば、1時間ごとに約30秒ELAPSEDアラームは、これらの以前のプラットフォームバージョンではこのバグの影響を受けません。アラームがネットワークアクティビティをトリガーしない場合でも、それがウェイクアップアラームである場合は、ネットワークにヒットする可能性のある他のアラーム非ウェイクアップインテントをトリガーする場合があります。

タイムベース

  • アラームタイプの正しい時間ドメインで要求された開始時間を指定するように注意してください。これを行わないと、RTCアラームをELAPSEDタイムベースで設定した場合、または= RTCタイムベース。dumpsys alarmを介してadb Shellを使用して、アプリがスケジュールしたアラームを確認できます。

間隔

  • AlarmManager APIで定義された間隔定数以外の不正確なアラーム間隔を指定すると、SDK <19で冗長になります。正確ではなく正確でないアラームとしてスケジュールされ、不正確なアラームが提供するすべての省電力の利点が失われます。

編集:Gingerbreadおよびハニカム3.0デバイスに関連するバグの詳細な説明: https://code.google.com/p/Android/issues/detail?id=3155

9
fingertricks

setRepeatingの方が正確およびsetInexactRepeatingはバッテリーを節約するが正確ではない.

4
Jesus Dimrix