2012-04-17 77 views
1

正如上一個問題的答案中所述,即使CPU在Android設備上進入睡眠狀態後,CDMA和GSM無線電也會保持開啓狀態。 我的問題是...Android:在睡眠模式下收聽數據包數據

  1. 當收到呼叫時,什麼是喚醒CPU /電話?
  2. 即使在手機進入睡眠模式後,是否有類似的機制可以在數據通過活動TCP連接接收到服務器時喚醒應用程序?

回答

1

CPU睡着時無法接收數據。

需要暫時喚醒CPU以查看是否有新數據。在你的代碼中檢查新數據,如果有新數據,你可以保持清醒並關閉並進行處理。

你一定想了解BroadcastReceiver和android報警。基本上,您可以告訴Android每5分鐘發送一次鬧鐘或其他任何事情,即使它正在睡覺。您的BroadcastReceiver在從Android獲取警報時喚醒CPU,並保持足夠長的時間檢查您是否有新數據,或者您嘗試執行的任何操作。如果你有新的數據,你可以告訴CPU保持清醒狀態,然後你就可以開始處理你的新數據。

這裏是一個reasonable tutorial。當然,Android Developer文檔也很有幫助。

+0

感謝您花時間回覆。 「需要偶爾喚醒CPU以查看是否有新數據。」如何查看是否有新的數據?我查看了Intents列表,沒有可用的指示分組數據已收到。 – 2012-04-17 03:24:08

+0

@HeshanPerera不理會睡覺。無論您知道手機處於清醒狀態時您要寫的任何代碼,您都會在接收器中寫入相同的代碼。然後警報喚醒接收器,接收器試圖獲取數據(如果它在那裏),如果它不是接收器回到睡眠狀態。 – mwengler 2012-04-17 03:38:49

+0

我明白你在說什麼。問題是,Android文檔沒有提到廣播接收器可能會用於偵聽分組數據的這種特殊情況。你會不會意識到這樣的意圖? – 2012-04-17 03:51:51

1

你可能想看看發送推送通知到你的設備(如果你不特別需要TCP)。

查看Google提供的(免費)Android Cloud到Device Messaging(C2DM)服務(http://code.google.com/android/c2dm/)。

需要一些工作才能建立,並且只支持2.2+,但真正簡化了客戶端/服務器體系結構。

+0

我正在研究C2DM以及..唯一的缺點是設備需要登錄到Google帳戶。無論如何,我的理解是C2DM也使用TCP協議運行......對吧? – 2012-04-17 03:26:58

+0

是的,它使用保持活動數據包來保持與Google C2DM服務器的連接。根據我的經驗,在用戶更改連接模式時邊緣保持良好連接(邊緣 - > wifi - > 3g) – theelfismike 2012-04-17 03:38:02