专栏首页Android群英传Android中的睡与不睡

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),作者:徐宜生

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

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

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 震惊!我逆向了Android代码居然看见……

    用户1907613
  • Xposed加载JNI库

    用户1907613
  • Kotlin修炼指南(一)

    最近会写一些关于kotlin的文章,主要是为了引出函数式编程的概念,并介绍kotlin中的一些骚操作。第一篇文章主要介绍作用域函数。

    用户1907613
  • Codeforces1214 D Treasure Island

    用户2965768
  • 【ssm个人博客项目实战05】easy ui datagrid实现数据的分页显示1、数据格式准备工作2、业务层实现3、控制层实现4、前端视图处理

    前面一节 我们已经实现博客类别的dao层的实现,其中特别讲解了博客类别的分页的实现,那么现在我们实现了后台的分页,那么前台分页怎么显示呢,这时候我们用到了eas...

    yukong
  • 图说|GDP核算方法一项指标的修正,如何影响我国经济?

    大数据文摘
  • TCP三次握手/四次挥手

    TCP 连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号和确认号并交换 TCP 窗口大小信息。以下步骤概述了通常情况下客户端计算机联系服务器...

    阳光岛主
  • java Hello world 源码执行流程详解

    hello world 作为我们学习的第一个个程序,看起来很简单,但是要理解其执行的具体流程还是需要很深的功底,包括对组成原理,操作系统的理解,今天将java ...

    用户7625070
  • 无线局域网中取消认证攻击的验证

       平台为linux,使用软件为aircrack-ng。        取消认证攻击和关联的原理:不断对用户发表明认证不成功的数据包,对AP发用户想要断开连...

    triplebee
  • 2018年9月9日用HTML开发网页的总结

    今天学到的新单词: relationship n关系 inherit v继承 rel:relationship的英文缩写·REL属性用于定义链接的文件...

    武军超

扫码关注云+社区

领取腾讯云代金券