Android设备是如何进入休眠的呢?

首先我们手机灭屏后,一般需要等一段时间CPU才真正进入休眠。即Android设备屏幕暗下来的时候,并不是立即就进入了休眠模式;当所有唤醒源都处于de-avtive状态后,系统才会进入休眠。在手机功耗中从灭屏开始到CPU进入休眠时间越短,则待机场景越省电。

Android设备是如何进入休眠的呢?

    答:Android提出了“Opportunistic suspend”的理论,通俗的讲,就是“逮到机会就睡”,“Opportunistic suspend”思想是非常简单的,只要检测到系统没有事情在做(逮到机会),就suspend整个系统。这对系统的开发人员(特别是driver开发者)来说,很容易实现,几乎不需要特别处理。但困难的是,“系统没有事情在做”的判断依据是什么?能判断准确吗?会不会浪费过多的资源在"susend->resume-supsend…”的无聊动作上?如果只有一个设备在做事情,其它设备岂不是也得陪着耗电?等等…

0

Android设备进入休眠的流程:

1.用户按下电源键:

    用户通过按下电源键触发设备的休眠流程。

2.息屏超时:

    设备屏幕在设定的时间内无操作后自动进入休眠状态。

3.AMS(Activity Manager Service)处理:

    AMS负责管理Activity和Service的生命周期,调用它们的onPause和onStop方法,确保应用在休眠前保存数据。

4.应用保存数据:

    应用在进入休眠前保存当前状态和数据,以防止数据丢失。

5.检查是否存在持锁:

    系统检查是否存在阻止设备进入休眠的锁(如唤醒锁)。

6.执行Early Suspend流程:

    如果不存在持锁,系统开始执行早期挂起流程。

6.1关闭背光:首先关闭屏幕背光以降低功耗。

6.2停止扫描触摸:停止触摸屏的扫描功能,进一步减少功耗。

6.3 关闭摄像头等硬件模块

即提前关闭摄像头等高耗电硬件模块,以更快降低功耗。

7.关闭屏幕:

    完全关闭屏幕显示。

8.停止传感器:

    WiFi和BT低功耗模式:停止传感器的工作,并将WiFi和BT模块置于低功耗模式。

9.内核层处理:

9.1同步文件系统:

    调用sys_sync,将缓存数据写入磁盘,确保数据不丢失。

9.2挂起设备:

    遍历设备,调用suspend方法,将设备置于低功耗状态。

9.3进入STR(Suspend to RAM):

    CPU进入低功耗状态,关闭大部分硬件,只保留必要的唤醒源(如按键、网络和RTC闹钟)。

10.CPU进入低功耗状态:

    设备最终进入低功耗休眠状态,等待用户下一次唤醒。

Android休眠框架图

在Android自动休眠(Auto Sleep)机制涉及两个关键概念:Early Suspend 和 WakeLock。这两个机制共同管理设备的电源状态,以优化功耗和性能。

0

Early Suspend(预挂起机制)

    Early Suspend 是Android电源管理中的一个机制,用于在设备进入完全休眠状态之前,提前关闭一些高耗电的硬件模块。这样可以更快地降低功耗,延长电池寿命。

1.触发条件:

    当系统检测到用户按下电源键或屏幕超时,且没有应用持有唤醒锁(WakeLock)时,Early Suspend机制会被触发。

2.执行步骤:

2.1关闭背光:首先关闭屏幕背光,以减少功耗。

2.2停止触摸屏扫描:停止触摸屏的扫描功能,进一步降低功耗。

2.3关闭摄像头等硬件模块:提前关闭摄像头、USB等高耗电硬件模块。

3.目的:通过提前关闭这些硬件模块,系统可以更快地进入低功耗状态,而不需要等待所有设备都进入休眠状态。

WakeLock(唤醒锁机制)

    WakeLock 是Android系统中用于防止设备进入休眠状态的机制。应用可以通过申请WakeLock来保持设备处于唤醒状态,以执行一些后台任务或保持屏幕常亮。

1.申请与释放:

1.1申请WakeLock:应用可以通过PowerManager申请WakeLock,以保持设备唤醒。

1.2释放WakeLock:当任务完成后,应用需要释放WakeLock,以允许设备进入休眠状态。

2.类型:

2.1阻止CPU进入suspend的WakeLock:保持CPU运行,但允许屏幕关闭。

2.2屏幕WakeLock:保持屏幕亮起,但允许CPU进入休眠。

3.管理:

3.1PowerManagerService:负责管理所有WakeLock的申请和释放。

3.2WakeLock Manager:在内核层管理WakeLock的状态,确保设备在适当的时候进入休眠。

协同工作

    Early Suspend和 WakeLock 机制协同工作,以确保设备在不需要时进入低功耗状态,同时在需要时保持唤醒。

    1.当所有WakeLock被释放时,系统会继续执行休眠流程,包括Early     Suspend和最终的Linux Suspend。

    2.如果存在任何WakeLock,系统将延迟进入休眠状态,直到所有WakeLock被释放。

    通过这两个机制,Android系统能够在保证用户体验的同时,有效地管理设备的电源状态,延长电池寿命。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/30662.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

多线程知识概述

目录 1. 基本知识概述 2. 多线程概述 2.1 优点 2.2 使用场景 3. 创建线程 3.1 继承 Thread 类 3.2 实现 Runnable 接口 3.3 比较 3.4 创建 Callable 接口 3.5 使用线程池 4. Thread 类常用方法 5. 线程生命周期 6. 线程安全机制 6.1 同步代码块 6.2 同步方法 6.3 …

elasticsearch是哪家的

Elasticsearch:数据搜索与分析的领航者 在当今这个信息爆炸的时代,快速且准确地处理海量数据成为了众多企业和组织追求的目标。而Elasticsearch正是在这个背景下脱颖而出的一款强大的开源搜索引擎。它是由位于美国加利福尼亚州的Elastic公司所开发和维护…

Spring学习笔记:工厂模式与反射机制实现解耦

1.什么是Spring? spring是一个开源轻量级的java开发应用框架,可以简化企业级应用开发 轻量级 1.轻量级(对于运行环境没有额外要求) 2.代码移植性高(不需要实现额外接口) JavaEE的解决方案 Spring更像是一种解决方案,对于控制层,它有Spring…

【一个月备战蓝桥算法】递归与递推

字典序 在刷题和计算机科学领域,字典序(Lexicographical order)也称为词典序、字典顺序、字母序,是一种对序列元素进行排序的方式,它模仿了字典中单词的排序规则。下面从不同的数据类型来详细解释字典序: …

前端学习——CSS

CSS CSS(Cascading Style Sheets)级联样式表语法 选择器全局选择器元素选择器类选择器ID选择器合并选择器选择器的优先级 字体属性字体颜色 背景属性background-color属性background-image属性background-repeat属性background-size属性background-posit…

【Python 2D绘图】Matplotlib绘图(统计图表)

【Python 2D绘图】Matplotlib绘图(统计图表) 1. 概述1.1 简介1.2 安装1.3 导入1.4 保存1.5 数据来源1.5.1 Numpy ndarray1.5.2 Pandas DataFrame 1.6 中文显示 2. 基础样式2.1 颜色2.1.1 简称2.1.2 全称 2.2 布局2.2.1 Matplotlib 画布划分2.2.2 绘制子图…

学习笔记:Python网络编程初探之基本概念(一)

一、网络目的 让你设备上的数据和其他设备上进行共享,使用网络能够把多方链接在一起,然后可以进行数据传递。 网络编程就是,让在不同的电脑上的软件能够进行数据传递,即进程之间的通信。 二、IP地址的作用 用来标记唯一一台电脑…

Spark-TTS:基于大模型的文本语音合成工具

GitHub:https://github.com/SparkAudio/Spark-TTS Spark-TTS是一个先进的文本到语音系统,它利用大型语言模型(LLM)的强大功能进行高度准确和自然的语音合成;旨在高效、灵活、强大地用于研究和生产用途。 一、介绍 Sp…

【RAG】检索后排序 提高回答精度

问题: RAG中,有时,最合适的答案不一定排在检索的最前面 user_query "how safe is llama 2" search_results vector_db.search(user_query, 5)for doc in search_results[documents][0]:print(doc"\n")response bot.chat(user_qu…

线程安全问题(面试重难点)

这里只是简单介绍以下线程安全,具体情况要结合代码进行判断 线程 是随机调度,及 抢占式执行 ,具有随机性,就可能会让我们的结果出现不同 当我们得到的结果并不是我们想要的时候(不符合需求),就会被认定为BUG,此时就是出现了线程安全问题 那么存在线程不安全的代码就被认为是…

数据结构第七节:红黑树(初阶)

【本节要点】 红黑树概念红黑树性质红黑树结点定义红黑树结构红黑树插入操作的分析 一、红黑树的概念与性质 1.1 红黑树的概念 红黑树 ,是一种 二叉搜索树 ,但 在每个结点上增加一个存储位表示结点的颜色,可以是 Red和 Black 。 通过对 任何…

读书报告」网络安全防御实战--蓝军武器库

一眨眼,20天过去了,刷完了这本书「网络安全防御实战--蓝军武器库」,回味无穷,整理概览如下,可共同交流读书心得。在阅读本书的过程中,我深刻感受到网络安全防御是一个综合性、复杂性极高的领域。蓝军需要掌…

从传统到智能:Node-red工控机助力农业大棚高效监控

智慧农业逐渐成为现代农业发展的主流方向。在这一背景下,农业用工控机(简称“农控机”)作为智慧农业的核心设备之一,正在为农业大棚的智能化管理提供强有力的支持。本文将详细探讨农控机在智慧农业大棚监控中的应用,并…

硬件学习笔记--48 磁保持继电器相关基础知识介绍

目录 1.磁保持继电器工作原理 2.磁保持继电器内部结构及组成部分 3.磁保持继电器主要参数 4.总结 1.磁保持继电器工作原理 磁保持继电器利用永磁体的磁场和线圈通电产生的磁场相互作用,实现触点的切换。其特点在于线圈断电后,触点状态仍能保持&#…

WOA-Transformer鲸鱼算法优化编码器时间序列预测(Matlab实现)

WOA-Transformer鲸鱼算法优化编码器时间序列预测(Matlab实现) 目录 WOA-Transformer鲸鱼算法优化编码器时间序列预测(Matlab实现)预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现WOA-Transformer鲸鱼算法优化编…

K8S学习之基础十九:k8s的四层代理Service

K8S四层代理Service 四层负载均衡Service 在k8s中,访问pod可以通过ip端口的方式,但是pod是由生命 周期的,pod在重启的时候ip地址往往会发生变化,访问pod就需要新的ip地址,这样就会很麻烦,每次pod地址改变就…

R语言的基础命令及实例操作

> T & F [1] FALSE > T & T [1] TRUE > T | F [1] TRUE > F | F [1] FALSE > a <- c(T,F,T) > b <- c(F,F,T) > a & b [1] FALSE FALSE TRUE > a | b [1] TRUE FALSE TRUE 在 R 中&#xff0c;大小写是敏感的&#xff0c;也就是说…

LLM 模型 Prompt 工程

目录 1、Prompt 基础概念 2、Prompt 主要构成 3、Prompt 相关技术 3.1、思维链 3.2、自洽性 3.3、思维树 1、Prompt 基础概念 Prompt 工程是通过设计和优化自然语言提示&#xff08;Prompt&#xff09;&#xff0c;引导LLM生成符合特定任务需求的输出的技术。其核心目标是…

Springboot基础篇(4):自动配置原理

1 自动配置原理剖析 1.1 加载配置类的源码追溯 自动配置的触发入口&#xff1a; SpringBootApplication 组合注解是自动配置的起点&#xff0c;其核心包含 EnableAutoConfiguration&#xff0c;该注解使用AutoConfigurationImportSelector 实现配置类的动态加载。 启动类的注…

【大模型系列】开发工具Cursor使用配置及备忘

开发工具cursor使用过程的配置备忘 最近一段时间大模型开发工具cursor是比较火爆的&#xff0c;其提供的一个比较有价值的特性就是其ai辅助功能&#xff0c;其内部集成了若干大模型 提供免费使用期&#xff1b; 做大模型开发这个话题应该是绕不过的&#xff0c;就像开发java使…