10

使っています

alarmManager.setInexactRepeating(AlarmManager.ELAPSED_REALTIME, 0, DURATION, broadcast);

デバイスがスリープしていない場合にのみ実行する必要がある繰り返しタスクをスケジュールします。私が理解しているように、AlarmManagerのAPIは、デバイスがスリープから復帰するとインテントが呼び出されます。

Androidデバイスはいつスリープ状態になりますか?テストのために、期間を2分に設定し、デバイスをマシンに接続しました。今私はlogcatを見ています、そして2分ごとにそれは私のデバッグメッセージを吐き出します。

画面が非アクティブになると、デバイスがスリープ状態になり始めるといつも思っていました。または、デバイスがスリープ状態になるのを防ぐデバッグ出力を見ていますか?また、USB接続を切断し、30分後にログを確認したところ、ディスプレイが15分以上暗くなっていても、タイマーコードの呼び出しを確認できました。

コマンドが実行されなくなった時刻と、AlarmManagerのドキュメントでスリープ状態が何を指しているかを確認するにはどうすればよいですか?デバイスがスリープを開始したときのlogcat出力から確認する方法はありますか?

4

2 に答える 2

8

オフになっている画面は、必ずしもスリープ状態のデバイスを示しているわけではありません。アプリケーションは、画面がオフになっている間、デバイスをスリープ状態に保つウェイクロックを要求できます。別のアプリに不正確な繰り返しを使用しないタイマーがある場合、デバイスはそのためにもウェイクアップします。

お使いのデバイスのAndroidのバージョンに応じて、[設定]->[端末情報]->[電池使用量]->上部のグラフをクリックすると、起床時間のグラフが表示されます。ウェイクロックの詳細については、http://developer.android.com/reference/android/os/PowerManager.htmlをご覧ください

于 2011-02-28T14:35:26.873 に答える
7

デバイスのスリープを妨げるアプリケーションが実行されていない場合、デバイスはスリープ状態です。つまり、1。画面がオフになっている(オンになっている間は、実行中のアプリ(Launcherなど)が常に存在する)2。実行中のサービス(音楽、ダウンロードなど)がない-CPUロックがない。

AlarmManagerはデバイスをスリープから復帰させ、実行するものを実行します。たとえば、放送受信機で作成されたサービスをアラームから終了して、デバイスを再びスリープ状態にすることが重要です。バックグラウンドで長く重要なことを行う場合は、Android OSによってアプリが強制終了されないように、アプリのCPUロックを取得する必要があります。

「コマンドが実行されなくなった時刻を確認するにはどうすればよいですか」とはどういう意味ですか?どんなコマンド?

JavaDocから:

登録されたアラームは、デバイスがスリープしている間は保持されます(また、その間にデバイスがオフになった場合は、オプションでデバイスをウェイクアップできます)が、オフにして再起動するとクリアされます。

そのため、OSはすべてのアラームを保持し、デバイスはスリープ中に発生するアラームによってウェイクアップできます。アラームは再起動後にドロップされます(DBに保持し、再起動後に復元する必要があります)。

「デバイスがスリープを開始したときのlogcat出力から確認する方法はありますか?」ないことを知っているので、画面が消えたときだけそのようなsthを見ることができます:

*** set_screen_state 0「パワー」タグから

スリープモードを気にする必要はありません。必要に応じて画面のオフとオンのインテント(Intent.ACTION_SCREEN_OFF)を処理し、サービスをできるだけ早く終了し、リソース(ネットワーク、GPS、CPU)をできるだけ早く解放して、アプリを「Androidの良き市民」にしてください。不正確なアラーム、ダウンロードマネージャー、およびOSによってもたらされたすべての優秀なスタッフ。AndroidはCPUスリープを透過的に処理すると思います。

于 2011-03-01T23:39:22.790 に答える