setInexactRepeatingとELAPSED_REALTIME(またはRTC)を組み合わせると、バッテリーの消耗を最小限に抑えることができます。既存の保留中のインテント(同じインテントとID)でフラグFLAG_UPDATE_CURRENTを使用すると、現在のアラームスケジュールがすでに存在する場合は単に更新されます。または、Ralghaによって提案されたコードを追加して、保留中のインテントがすでに作成されているかどうかを確認してアラームを設定し、作成されていない場合は、保留中のインテントとアラームスケジュールを設定します。どちらの方法も、バッテリーに同じ影響を与える可能性があります(無視できます)。かなりの消耗を引き起こすのは、頻繁なスケジュールで何かをしていることです。画面がオフのときではなく、1時間ごとにのみ更新する必要があるという事実により、アプリはほとんどバッテリーを使用しません(比較的迅速に処理され、その後正常にクリーンアップされると仮定します)
http://developer.android.com/reference/android/app/AlarmManager.html#ELAPSED_REALTIME
ELAPSED_REALTIME
このアラームはデバイスをウェイクアップしません。デバイスがスリープ状態のときに消灯した場合、次にデバイスがウェイクアップするまで配信されません。
http://developer.android.com/reference/android/app/AlarmManager.html#setInexactRepeating%28int,%20long,%20long,%20android.app.PendingIntent%29
setInexactRepeating
これらのアラームは、setRepeating(int、long、long、PendingIntent)によって提供される厳密な繰り返しよりも電力効率が高くなります。これは、システムがアラームのフェーズを調整して同時にアラームを発生させ、デバイスを必要以上にスリープから復帰させないようにするためです。
http://developer.android.com/reference/android/app/PendingIntent.html#FLAG_UPDATE_CURRENT
FLAG_UPDATE_CURRENT
...説明されているPendingIntentがすでに存在する場合は、それを保持しますが、余分なデータをこの新しいインテントにあるものに置き換えます。これは、エクストラのみが変更されるインテントを作成していて、以前のPendingIntentを受け取ったエンティティが、明示的に指定されていなくても、新しいエクストラでそれを起動できることを気にしない場合に使用できます。