我的應用程序有幾個服務在後臺運行。他們使用:長期居住的TCP連接,GPS,Accelerometer和android.os.CountDownTimer。我可以擺脫WakeLock嗎?
我已經知道加速度計和CountDownTimer需要一個部分WakeLock工作,當我的手機進入睡眠狀態(Android 2.2),GPS不需要WakeLock,不知道TCP套接字嗎?
CountDownTimer希望可以替換爲java.util.Timer,我認爲它仍然可以在沒有WakeLock的情況下工作?然後,我可以獲取/釋放WakeLock以進行週期性加速度計檢查。然後當Acclerometer檢測到移動時,我可以打開GPS。如果沒有GPS信號,我可以回到我的計時器滿圈。
這個工作沒有永久性的WakeLock嗎?我不知道TCP連接。
編輯︰ 原來你不得不在深度睡眠時使用AlarmManager,當沒有喚醒鎖定設置得到準確的定時器。
TCP套接字的作品不夠好沒有激活鎖定:
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套接字有什麼影響(如果有的話)。