2011-12-01 45 views
6

我知道android使用喚醒鎖來保持cpu運行或屏幕上。 很明顯,屏幕喚醒鎖定可防止用戶在一段時間不活動之後關閉屏幕。android會在沒有喚醒鎖的情況下停止它的CPU嗎?

但我想知道什麼時候cpu喚醒鎖纔會生效。

1.如果我創建了一個新的線程,並保持在後臺排空任何喚醒鎖定CPU,關閉屏幕不會停止它。它會停止,什麼時候會停止?

2.用Timer.schedule()調度的線程怎麼樣?

3.如果我在服務中保持一個長套接字連接,並在socket.read()處阻塞,那麼會導致另一個問題。當套接字從遠程接收任何數據時,是否必須獲取喚醒鎖以確保服務將被喚醒?

謝謝。

+0

如果我用android標準Thread創建一個線程,然後在其線程上調用wait(timeout),它會在正確的時間喚醒嗎? – lyu

回答

5

回答您的所有子問題時,沒有喚醒鎖定有效

  1. 的Android睡覺。不管進程和線程在運行,它仍然會休眠。這意味着如果您的線程或其他某個進程沒有激活喚醒鎖定,您的線程將不會執行,因此不會耗盡任何電池。只有當其他進程獲得喚醒鎖時,該線程纔會激活。

  2. 同樣適用於Timer.schedule()。假設你編寫了一個每秒執行但沒有任何喚醒鎖的定時器,並且說android會進入睡眠狀態10秒。當它在第11秒醒來時,它會識別出你的計時器已經過期了10次,它只會丟棄這9個實例並且只執行一次。如果你想要非常可靠的定時器,你將不得不獲得喚醒鎖或用戶AlarmTimer。

  3. 是的。

0

我從有關Wake-Lock不同的功能學到什麼,Android系統將不夜城,如果它睡覺,你不會得到短信,通話時,它會在睡眠即Android將不會只運行OS級別的任務。
喚醒鎖定是一種機制,任何應用程序都可以請求系統讓設備保持爲他。應用程序可以在後臺執行操作,儘管用戶沒有移動以啓動該應用程序。

For 1 & 2 Akshar已經正確解釋。 3.爲了在系統處於睡眠狀態時執行應用程序中的任何操作(只有操作系統級別的任務正在運行),首先必須從系統請求喚醒鎖定,然後只有應用程序可以運行其操作。完成操作後,您應該釋放喚醒鎖,以便系統可以移動到管理操作系統級任務。