2012-04-19 12 views
2

私は無線LAN経由で着信要求を継続的にリッスンする必要があるアプリケーションを持っています。バックグラウンドで実行されるサービスがこのジョブを実行します。しかし、このサービスは、画面が消えるとしばらくすると眠りにつきます。バッテリーを消耗させずにサービスを継続する

私が検索した解決策は、AlarmManagerを使用して目を覚ますことです。しかし、これは、デバイスのバッテリーを消耗すると言われています。 これを行う別の方法がありますか?

たとえば、WhatsappやSkypeのようなアプリは何ですか?彼らはあまりにも多くのバッテリーを殺すように見えないが、彼らは継続的にサービスを実行している?

また、AlarmManagerが唯一の方法である場合、誰かがチュートリアルや例を共有できるのは本当に親切です。

+0

電話を接続しますか? – cHao

答えて

2

私が検索したものからの溶液を助けにはなりません

を覚まし、それを維持するためにAlarmManagerを使用することです。デバイスがスリープ状態になると、ソケット接続が終了します。デバイスの電源を継続的にオンに保つには、部分的にWakeLockWifiLockを使用する必要があります。

しかし、これはデバイスのバッテリーを消耗すると言われています。

WakeLockおよびWifiLockは、バッテリーを確実に放電させます。

これを行う別の方法はありますか?

WiFiを使用する必要がない場合は、

たとえば、WhatsappやSkypeのようなアプリはどうしますか?

デバイスがスリープ状態になるときにWiFiを使用しません。 WiFi無線機の電源が落ちたら、モバイルデータを使用するため、WifiLockは必要ありません。モバイルデータの場合、着信パケットはデバイスを起動させるため、実際には作業している間に常にWakeLockが必要です。

最高の答えは、C2DMを使用するように切り替えることです。

+3

「WiFi無線機の電源が落ちたら、モバイルデータが使用されます」 - しかし、電話機がスリープ状態で、モバイルデータがオフになっていても(Wi-Fiがオン)、なぜWhatsAppメッセージを受信できますか?ありがとう – BornToCode

+1

@BornToCode Gud ask .. – NitZRobotKoder

+0

@CommonsWareここにあなたは何を追加しますか? – NitZRobotKoder

2

実際には、スリープ状態になるあなたのサービスではなく、デバイス上のWiFiユニットです。 HTC(またはおそらくすべてのAndroidデバイス)のような製造業者は、ある種のスクリーンオフの時間の後にWiFiユニットが待機するようなデバイスで、この種の動作を実装しています。これは、デバイスが使用されていないときにバッテリを節約するのに役立ちます。

関連する問題