(デバイスがスリープ状態になると停止する稼働時間とは対照的に) 実際の経過時間に基づいてアクションの時間を計測する唯一の方法は、AlarmManager のようです。
たとえば、AlarmManager のオープンソース ラッパーを介して、「ウォールクロック」ベースの遅延実行を行う簡単な方法はありますか?
通常のタイミング操作では、ハンドラーを使用できます。これは、このような単純なタスクと同じくらい簡単です。
- ハンドラー コールバックを実装する (登録は不要)
- ハンドラーをインスタンス化する
- sendEmptyMessageDelayed または同様の関数を呼び出す
- 設定したすべての遅延をクリーンアップするには、呼び出すだけです
removeCallbacksAndMessages(null)
ただし、Handler は稼働時間ベースの遅延のみをサポートしているため、十分でない場合があります (たとえば、15 分ごとにサーバーで新しいメッセージを確認したい場合)。
これらが必要な場合は、AlarmManager を使用する必要があるようですが、これはあまり快適ではありません。
- アラームのアクションを定義する
- レシーバーを作成します (専用のレシーバー クラスを作成してマニフェストとして宣言するか、インターフェイスを実装し、registerReciever を使用してレシーバーを登録し、完了したら登録を解除します)。
- アクションの意図を作成する
- 上記のインテントを保留中のインテントにラップし、アラームをキャンセルする場合は保留中のインテントを保存します
- アラーム マネージャを取得します (これにはコンテキストが必要です)
- アラームを設定する
- アラームをキャンセルしたい場合は、格納されている pendingIntent を使用してキャンセルします
- 複数のインテントまたはデータを変更するインテントを持つことにした場合は、後でアラーム マネージャーをクリーンアップするためにそれらをすべて保存する必要があります。