2012-09-18 9 views
6

私は2Dバーコードをスキャンし、長いタスクが実行されるIntentServiceに各バーコードを送信する小さなユーティリティーアプリケーションを開発しています。複数のウェイクロックを保持することはできますか?

アクティビティが表示されている場合、バーコードがサービスで処理されるまで、デバイスがスリープ状態にならないようにする必要があります。サービスが処理を終了すると、サービスは停止しますが、アクティビティは引き続き表示されます。

アクティビティのライフサイクル中にSCREEN_DIM_WAKE_LOCK WakeLockを保持したいのですが、このタイプではCPUがスリープ状態にならないため、新しい2DコードがスキャンされたときにPARTIAL_WAKE_LOCKを取得する必要があります処理された後、インテントサービスでリリースされます。

SCREEN_DIM_WAKE_LOCKの目的は、数秒ごとに電源ボタンを押してデバイスを起動し、新しいバーコードを読み取ることができないという不便を避けることです。ユーザは、多数のコードを次々に読まなければならず、ユーザのやりとりがない短い間隔であっても、その活動はまわりにあるべきである。

私はアプリがコントロールできないいくつかの条件のために、アプリがトップに、クローズされていない、またはフォアグラウンドになっていることを100%保証していませんが、できる限り行きたいと思います。

したがって、複数のWakeLockを保持することは可能ですか?彼らはどこで活動と奉仕の両方によってアクセスされると宣言できますか? (シングルトン、拡張アプリケーション?)

答えて

9

複数のWakeLockを保持することは可能です。実際には、スクリーンがオフになっているときに同時に複数のアプリケーションが同期している間は、いつでも実行されます。 (画面がロックされているときにGmailとFacebookのアプリケーションが同時に同期していると想像してみてください)WakeLocksの種類が異なるかもしれません。

私の意見では、あなたがSCREEN_DIM_WAKE_LOCKを必要としているという事実を熟考していると思いますが、これは誤ってたくさんのバッテリーを消耗する可能性がありますが、間違っている可能性がありますあなたのユースケースに応じて。

したがって、短い答えはYESです。あなたは複数のWakeLockを保持することができ、Androidは期待通りに動作するはずです。心に留めておくべきことは、両方のWakelocksを適切に解放することだけです。

画面の上に乗る問題では、一時停止状態(何らかの別のアクティビティが上にあるとき、または意図的に電源ボタンを押したとき)にWakeLockを放つべきだと思う。この時点で、ユーザーは別のアプリとやりとりしているため、そのアプリを尊重して自分の行動を制御できるようにする必要があります。完了するまで、サービスから部分的なウェイクロックを放棄する必要はありません。

希望はこれが助けます。

+0

+1。しかし、私は 'onStop'でスクリーンWakeLockを公開しています。なぜなら、私はダイアログを押すときにスリープ状態にしたくないからです。 –

+0

私は、ダイアログが前面に来ると、ユーザーはダイアログに応答しなければならないので、バーコードをスキャンしていないことを前提にしています。時間内のダイアログ? – Madushan

+0

はい、まあまあ、スリープタイマーの時間はどれくらいかかりますか? 3秒かかると、電源ボタンを押すのが面倒です。時間がかかると、私はそれでいいです。作業負荷に応じて、私は画面の薄暗いロックをダンプすることさえできます。 –

関連する問題