Android中的睡与不睡

提问

今天有朋友在微信上问我,为什么手机进入休眠后,还能收到电话、QQ的消息呢?

这个问题看上去好像很普通,实际上,估计很多人都不见得能够说的清楚。

1

我们的处理器

那么实际上,在一般正常的情况下,系统在屏幕关闭后,就会开始Suspend所有进程,准备进入睡眠,这个过程根据手机的不同而不同,一般在10s左右即会进入正常的睡眠。按照这个说法,一旦手机睡着了,应该就收不到任何消息、电话了,但实际上,并不是这样,其中原因,和Android的系统架构有关。

在手机中,实际上有两个处理器,一个叫Application Processor,即AP处理器,一个叫Baseband Processor,即BP处理器。其中AP就是我们一般说的CPU,它通常是ARM架构,当然也有奇葩的x86架构,它用于运行我们的Android系统,在非睡眠情况下,AP的功耗非常高,特别是在绘图、计算、渲染等场景下。而BP则是另一个经常不为人知的处理器,他用于运行实时操作系统,手机最基本的通信协议栈就运行在BP的实时操作系统上,BP的功耗非常低,基本不会进入睡眠。

2

他们的协作

当手机正常进入睡眠后,AP就会被睡眠,而只有BP在工作,这也是基于降低功耗的考虑。那么睡眠后,我们是如何收到消息的呢?前面说了,整个通信协议栈是运行在BP上的,那么当有消息数据包到达时,BP就会唤醒AP,进行相应的处理。

同时,Android API还提供了WakeLock机制,那么为什么要设计这个机制呢?前面说了,一旦用户按电源键进行睡眠,AP中的所有进程都讲被Suspend掉,那么某些程序的关键代码,就有可能不能被执行,所以,Android提供了WakeLock来让开发者在睡眠模式下也能阻止AP进入睡眠,在运行完关键代码后,再进行睡眠。但是,这个机制也成为了很多App耗电的原因,开发者必须谨记,WakeLock必须在结束时释放,这比内存泄漏还要严重百倍。

3

还有个奇葩

在Android系统中,还有个比较奇葩的东西,那就是AlarmManager,这个东西可以用来做定时、做闹钟,相信大家都知道了,但是它到底运行在AP还是BP呢?显然不会是AP,因为在睡眠模式下,我们也能收到闹钟,实际上,AlarmManager运行在一个独立的RTC芯片中,通过向AP直接发送中断请求来唤醒AP。

原文发布于微信公众号 - Android群英传(android_heroes)

原文发表时间:2016-08-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Spark学习技巧

干货!一次kafka卡顿事故排查过程

由于一次功能上线后,导致某数据量急剧下滑,给我们紧张的呢!排查过程也是个学习过程!抛开结果,方法论可供参考~

854
来自专栏FreeBuf

序列化漏洞影响半数以上Android手机

Stagefright漏洞爆出没多久,Android平台又爆出一重大漏洞,影响55%的手机。IBM的X-Force应用安全研究团队近日发现了这一漏洞。 攻击者可...

2129
来自专栏顶级程序员

微软一脸懵逼:32TB的Win10源码泄露!

综合自:36氪、 Solidot、快科技、程序猿等媒体 黑客泄露微软 Win 10 大量源代码,数据超过 32 TB 据 theregister 报道,已经有多...

4337
来自专栏FreeBuf

数据安全分析思想探索

日志分析在入侵检测中的应用越来越广泛,合适的使用日志,使日志产生巨大的价值,本文旨在探讨如何让日志的价值在安全领域发挥作用。

1914
来自专栏编程一生

业务高速增长场景下的稳定性建设实战

2362
来自专栏EAWorld

微服务转型,雪崩效应是绕不过的一道坎

记得在三年前公司因为业务发展需要,就曾经将单体应用迁移到分布式框架上来。当时就遇到了这样一个问题:系统仅有一个控制单元,它会调用多个运算单元,如果某个运算单元(...

55012
来自专栏开源项目

本周新晋优秀开源项目榜单 | 码云周刊第 76 期

1533
来自专栏微信公众号:Java团长

干货!一次kafka卡顿事故排查过程

由于一次功能上线后,导致某数据量急剧下滑,给我们紧张的呢!排查过程也是个学习过程!抛开结果,方法论可供参考~

952
来自专栏大宽宽的碎碎念

初创公司如何避免服务器被攻击

9435
来自专栏程序员的SOD蜜

闲话权限系统的设计

一、权限的本质 权限管理,首先要理清权限的本质:权限就是对受保护资源的有限许可访问。 理解了权限的本质,就好谈权限的管理了。 权限就是对受保护资源的有限许可访问...

3678

扫码关注云+社区

领取腾讯云代金券