2

Android のアラームで奇妙なことに気付きました。常に正しい間隔でデバイスを起動するとは限りません。たとえば、(RTC_WAKEUP などを使用して) 5 分ごとにサービスを開始するようにアラームを設定した場合、デバイスがスリープ状態になるまですべて正常に動作します。通常、最終的には起動します-メニューを押してデバイスを起動すると、常に起動します。繰り返しアラームを使用しても (毎回アラームを再設定するのではなく)、同じ効果があります。

私の質問は、デバイスがスリープ状態のときにアラームが適切な間隔で起動することが保証されているかどうかです。ミリ秒や秒の精度を期待すべきではないことは理解していますが、数十分ですか?

4

2 に答える 2

7

私は Android でプログラミングしたことはありませんが、ちょっと退屈だったので、グーグルで調べてみると、これは非常に関連しているようです。読むにはGoogleアカウントにサインインする必要があります)

AlarmManager のドキュメントをもう一度見たところ、サービスを開始するのではなく、アラームを使用してイベントをブロードキャストすることについてのみ言及されていることに気付きました。AlarmClock アプリケーションの例に従って、 onReceive() でロックを取得し、ロック参照を別のクラスの静的メンバーとして保存する代わりに BroadcastReceiver を使用するように変更しました: https://android.googlesource.com/platform /packages/apps/AlarmClock

それはうまくいったようです。何が起こっていたのかというと、サービス開始アラームが発生していたのですが、ウェイクロックを取得する前にデバイスがスリープ状態に戻ることがありました。どうやら、アラームが受信されたときに行われる唯一の保証は、onReceive が完了するまで実行されることです。

誰かが同じ問題を探している場合に備えて、これを投稿すると思いました。

于 2009-11-23T20:08:09.153 に答える
3

http://developer.android.com/reference/android/app/AlarmManager.htmlもご覧ください。

また、デバイスがスリープしているときは、プログラムですでにOnPause()が呼び出されているため、その時点ではサービスのみが実行されています。つまり、ブロードキャストレシーバーにウェイクロックが設定されていない限り(ドキュメントで提案されているように)、元のサービス呼び出しはデバイスのアウェイクステータスを維持しません。

于 2009-11-25T17:20:59.760 に答える