2011-11-07 7 views
3

確かに私はここでハッキングしていますので、いくつかの知識が必要です。バックグラウンドサービスにはどちらが良いですか?WakeLockまたはstartForeground

タイマーをカウントする別のスレッドに接続されたバックグラウンドで実行されるサービスがあります。私はしばらくして死にかけてカウントダウンに問題を抱えていて、それがサービスのガベージコレクションのためだと推測しました。私はstartForegroundを使ってこの問題を解決したようだ(実際のバッテリーの使用は見ない)。今、私はwakelocksについて読んでいます。どちらか一方を使うときのベストプラクティスはありますか?

ありがとうございます!

答えて

2

タイマーをカウントする別のスレッドに接続されたバックグラウンドで実行されるサービスがあります。

AlarmManagerを使用してください。時計のチックだけでなく、実際に仕事をしているときにサービスがメモリに保存されている必要があります。 Androidに関するユーザーからの苦情の中で最大のものの1つは、開発者が作成した携帯電話の邪魔になるような背景にあるものです。

私はstartForegroundを使用して問題を解決しているようです(実際のバッテリの使用は見られません)。

startForeground()の背後にある点は、あなたのサービスが継続的にサービスが原因長すぎるか低メモリ条件をぶらぶらに再利用されている場合、ユーザーが気づくような、ユーザーに価値を提供していることを示すためです。時計のチックを座って見てではない "継続的に値をユーザーに提供する"です。 AlarmManagerを使用してください。startForeground()は必要ありません。

ここで私はウォークロックについて読んでいますが、どちらを使うかについてのベストプラクティスはありますか?

WakeLockは、CPUの電源を入れたままにします(場合によっては画面のように)。 startForeground()とはほとんど関係がありません。 AlarmManagerを使用している場合は、実行中の作業に応じてWakeLockが必要になることがあります。

+0

"サービスが継続的に配信されていることを示すポイントですユーザーに価値を提供し、長すぎたり短くなったりするなどの理由でサービスが再利用されたかどうかを知ることができます。 startForeground()は必要ありません。 "そうですが、私は加速度計からのヒットを同時に登録しており、読書を得るたびに時計をリセットしています。だから私は同時にそれを開く必要があります。私はAlarm Managerを調べます。 – Jackie

+0

@ジャッキー:「同じ時間に同時に加速度計からのヒットを記録し、読書を得るたびに時計をリセットしています」 - これがなぜサービスであるのかは不明です。センサーを使用しようとするときは、常に電源をオンにする必要があります。センサーは、前景の活動から使用するように設計されています。それにもかかわらず、 'AlarmManager'はここであなたを助けません。しかし、センサーを読み取れるようにデバイスがスリープ状態にならないようにするには、「WakeLock」が必要です。 – CommonsWare

+0

"センサーを使用しようとすると、デバイスは常に電源をオンにする必要があります。私はこれが真実だとは思わない。もしそれがあったとしても、もっとバッテリーが消耗していると思うだろうから。今のところうまくいくようです。 – Jackie

関連する問題