私のアプリはバックグラウンドでいくつかのサービスを実行しています。彼らは、長寿命のTCP接続、GPS、加速度計、android.os.CountDownTimerを使用します。WakeLockを取り除くことはできますか?
携帯電話がスリープ状態(Android 2.2)になったときにAccelerometerとCountDownTimerが機能するためには、WakeLockが必要であることはすでに知っていますが、GPSはWakeLockを必要としません。
私はまだWakeLockなしで動作すると思うjava.util.TimerでCountDownTimerを置き換えることができますか?その後、定期的な加速度計のチェックのためにWakeLockを取得/解放することができます。 Accelerometerが動きを検出すると、私はGPSをオンにすることができます。 GPS信号がない場合は、タイマーのフルサークルに戻ることができます。
これは恒久的なWakeLockなしで動作しますか?私はTCP接続について知らない。
EDIT: 正確なタイマーを得るためにウォークロックが設定されていないときは、ディープスリープ状態でAlarmManagerを使用する必要があります。
TCPソケットがwakelockなしで十分に機能:
http://devtcg.blogspot.com/2009/01/push-services-implementing-persistent.html
生きソケットを維持しようとするいくつかのサンプルコード、:
http://code.google.com/p/android-random/source/browse/#svn/trunk/TestKeepAlive
あなたが使用していない場合setSoTimeout(無限大の場合は0に設定)、電話機がスリープしているときにソケットを有効にしていても、ソケットは長時間持続するようです。私は別のサービスで毎分WakeLockを取得してリリースしていますが。私はTCPソケットに(もしあれば)どのような影響があるのか分かりません。