为了更好的电池寿命,了解Android的“无线电状态机”

18
在Android文档页面“优化下载以实现高效的网络访问”中,要点是“唤醒电台很糟糕”,“批量传输您的数据”或“利用GCM”。该文章留下了一些好奇心的内部工作原理:
  1. 它说:“每次创建新的网络连接时,无线电都会转换为全功率状态。”这里的连接是什么意思?是TCP连接吗?这是否意味着发送UDP数据包不会唤醒电台?

  2. 待机模式下,它说:“待机:没有活动网络连接或需要的最低能量状态。”这是否意味着网络模块完全关闭?如果是这样,即使设备处于睡眠模式,GCM也如何工作?如果不是,与全功率模式相比,它大约使用多少电池电量?

  3. “每次创建新的网络连接时,无线电都会转换为全功率状态。”这如何兼容长时间运行的TCP连接?如果我创建一个TCP连接,然后只保持接收数据包,那么我将不会创建新的网络连接或发送任何数据。这是否允许网络模块进入待机模式?

  4. 苹果手机是否工作方式类似?

2个回答

20

@minhaz的链接启发了我对网络层中的蜂窝网络有了长时间的探究。以下是我的翻译:

这个问题主要涉及到3G网络的实现方式。回答中心问题:“那么在‘空闲状态’下,GCM如何接收消息”就能回答以上所有问题。

简短回答

是的,“空闲状态”下,射频仍然可以接收有限的“控制信号”。基本上,网络运营商会要求设备切换能量状态以接收实际的负载数据。他们用来执行此操作的机制类似于您接收电话或短信的方式。

详细回答

事实证明,状态转换是由网络运营商而不是手机自身控制的。来自资源无线电控制(RRC);协议规范

8.6.3.3 根据接收到的信息元素,通用状态转换规则

“RRC状态指示器”(Information Element)指示UE(用户设备)应进入的状态。UE将进入由“RRC状态指示器”(IE)指示的状态...

当RRC处于空闲模式时,网络运营商如何做到这一点呢?来自书籍《3G、4G及更高版本:将网络、设备和Web结合在一起》

2.2.3.3 无线资源控制状态

... 空闲状态——未与网络进行主动通信的设备处于此状态。在此状态下,它们定期侦听寻呼信道以接收语音或视频呼叫和短信。

来自LTE in Bullets

23.1 RRC连接建立过程始终由用户设备发起,但可以由用户设备或网络触发。... 网络通过发送寻呼消息来触发RRC连接建立过程。...

因此,我们现在很明显地看到了所有这些内容是如何联系在一起的。为了回答最初的问题:

  1. 连接指的是RRC连接。由于RRC连接属于第3层,所有(正常)网络活动包括TCP和UDP都会创建一个RRC连接(即“唤醒无线电”)。

  2. 由于无线电仍然需要监听寻呼信道,因此它并没有完全关闭。根据@minhaz提供的XMPP link实验结果,它仍然会消耗能量。结果与其他状态相比,能源消耗少了两个数量级。

  3. 如在Stack Overflow的各个地方所述,显然TCP连接存储在内存中,并不真正关心底层是否经历了RRC重新连接过程。如果TCP连接处于空闲状态,则可以释放RRC连接(即UE可以变为空闲状态)。如果它一直接收数据,则网络将不会指示UE释放RRC连接,因此它不会进入空闲状态。

  4. 由于RRC属于UMTS WCDMA,即底层3G技术,因此iPhone也很可能运行类似的操作。


注意:

  • 我提供的资源混合了3G和4G。我认为4G是一种渐进式的改进,因此主要概念可以在它们之间混合。

更深入了解的资源转储(即上述摘要的来源):


2

我不是SOC专家,但通过阅读相关文档,我了解到以下内容。

It said "Every time you create a new network connection, the radio transitions to the full power state." What does connection mean here? Is that a TCP connection? Does that mean sending a UDP packet will not wake up the radio?

任何类型的网络数据传输都会唤醒无线电,无论是UDP还是TCP,无论是1字节还是1 MB。
In Standby it said: "Standby: The minimal energy state during which no network connection is active or required." Does that mean the network module is completely shut off? If so how can GCM even work even when the device is in sleep mode? If not, roughly how much battery does it use compared to full power mode?

在不唤醒整个无线电的情况下,仍然可以保持与无线塔的连接。我相信这种设计早就已经存在,是为了节省移动电池的电量,与Android无关。可能会使用一种专门用于此任务的不同芯片,但我将把这个答案留给SOC专家。

"Every time you create a new network connection, the radio transitions to the full power state." How does that gibe with long lived TCP connections? If I create a TCP connection and then just keep receiving packets, then I won't be creating new network connections or sending out any data. Does that allow the network module to go to Standby mode?

要打开TCP连接,您总是需要一定程度的握手协议来保持无线电发射器处于唤醒状态。TCP是一种可靠的协议,这意味着传输将在两端进行验证以避免传输错误。在我们的情况下,这意味着无论如何,系统都将通过网络发送和接收数据。 TCP keep alive还可以进行网络握手(keep_alive),这意味着即使没有数据被传输,它仍将保持发射器唤醒。


2
但GCM是使用持久的TCP连接来实现的。它怎么能被吹捧为神奇的省电解决方案呢? - kizzx2
1
如果您说的GCM是指Google云到移动设备的消息传递,那么您可以参考 http://xmpp.org/extensions/xep-0286.html ,它清楚地解释了XMPP如何为移动应用进行优化。请查看第4部分,我想这可能是低功耗状态非常有用的地方。 - minhaz
1
该链接主要讨论XMPP如何支持压缩,并重申了Android文档中的信息。然而,缩写词(PCH、FACH、DCH)让我朝着正确的方向开始了。 - kizzx2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接