2012-04-17 55 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

相关问题