web-dev-qa-db-ja.com

WorkManagerは、アプリにアラーム/リマインダー機能を実装するための信頼できる方法ですか?

OSのバージョンによってAlarmManagerCompatの動作が異なるため、AlarmManagerだけでは、アプリにアラーム/リマインダー機能を実装するための信頼できる方法ではないことがわかりました。 (例えば、居眠りモード)

当初は、Evernoteの Android-job ライブラリを使用して、アプリにアラーム/リマインダー機能を実装する予定です。

ただし、途中で、GoogleがWorkerManagerをリリースしただけであることに気付きました。

これまでのところ、WorkerManagerは、アプリの終了後に1回限りのバックグラウンドジョブ(ほぼ即時、インターネット接続の制約あり)を実行するとうまく機能します。

アラーム/リマインダー機能を実装するためにWorkerManagerを使用する予定です。

WorkerManagerがそのような機能を実装するのにどれほど信頼できるのだろうかと思っていました。誰かがそれを試してみましたか? API15以降を対象としています。

13
Cheok Yan Cheng

WorkManagerは、特定の時間に起動する必要があるものには適していません。WorkManagerやAndroidジョブで使用されるジョブを含め、デバイスが居眠りしている間は起動しないためです。

正確なタイミングを得るには、絶対にAlarmManagerCompatを使用する必要があります。具体的には、 setExactAndAllowWhileIdle() を使用して、すべてのAPIレベルで正確に指定された時間にアラームを発生させます。

デバイスが居眠りしている間に正確なタイミングのアラームが発生する可能性があるため、アプリはアラーム/リマインダー通知を投稿するためにネットワーク接続を必要としないはずです。理想的には、情報はPendingIntent自体にあり、データベースのフェッチなどは必要ありません。

9
ianhanniballake