怎样降甘油三酯效果好? 吃什么降甘油三酯
2023-07-23
很多朋友对安卓电源管理app,Android电源管理基础知识介绍不是很了解,每日小编刚好整理了这方面的知识,今天就来带大家一探究竟。
一、电源管理基础知识1.1电源管理的几种状态在Android内核源代码中,定义了三种电源状态。在kernel/power/suspend.c:对应宏定义/include/linux/suspend.h1.2电源管理状态介绍:PM_SUSPEND_ON设备处于正常工作状态,PM_SUSPEND_STANDBY设备处于省电状态,但也可以接收一些事件。PM_SUSPEND_MEM设备进入睡眠状态,并在将系统的运行上下文保存到内存后挂起系统。
PM_SUSPEND_TO_IDLE设备进入空闲状态,冻结用户空间并将外围设备切换到低功耗模式。强制CPU进入idleADB查看支持的电源模式Cat/Sys/Power/State 1.3 Idle State Android的空闲状态分为两类:CPU空闲和设备空闲CPU空闲。每个CPU内核都有一个空闲进程。空闲进程是当系统不调度CPU资源时,就会进入空闲进程,空闲进程的作用就是通过不使用CPU来省电。
关于CPU空闲的内容,可以参考微信官方账号之前的文章《Linux Cpuidle介绍》 Device IdleDevice Idle,属于android Doze模式的概念,即手机屏幕关着,不充电,静止。根据谷歌的官方声明,唤醒锁、网络访问、作业暂停、闹钟和GPS/WiFi扫描都将停止。
系统将周期性地短时间退出Doze,让应用程序完成它被延迟的活动。在此维护窗口期间,系统运行所有挂起的同步、作业和警报,并允许应用程序访问网络。二、Android电源管理框架Android系统的电源管理框架分为五个部分:应用层、框架层、原生层、HAL层、内核层。电源管理架构图如下:
应用程序接口层:PowerManager.java负责为应用程序提供一系列接口,比如wakelock的申请和释放,从而使系统睡眠或唤醒框架层:PowerManagerService.java电源管理器Servic是android电源管理的核心服务。向上提供应用程序接口,向下通过hal层和内核层控制待机状态和系统硬件设备状态。HAL层:power.c接收上层参数,通过写节点与内核层通信。
内核层:Kernel/Power实现了系统电源管理的框架机制,提供了设备电源管理的基础框架三、WakeLockAndroid是一种锁机制,用来防止系统进入睡眠状态。只要任何应用程序持有唤醒锁,系统就不能进入睡眠状态。NewWakeLock(int flags,String tag)在申请WakeLock时有一个关键参数flags,有以下几种情况:partial _ wake _ lock:屏幕关,键盘灯关screen _ dim _ wake _ lock:屏幕变暗,键盘灯关。
The screen is bright, and the keyboard is bright. The above four are mutually exclusive, that is, only one of them can be specified, but they can not be mutually exclusive with the following two flags: get the reason to wake up: once the lock is requested, the screen is forced to open and the keyboard lights up after release; reset the activity timer when the lock is released.
如果系统申请了PARTIAL_WAKE_LOCK,那么即使按下电源键,系统也不会进入睡眠,比如音乐播放的时候。如果应用了其他唤醒锁,系统仍然会以两种状态进入sleepwakelock:一种是永久锁定,除非稍后释放,否则不会解锁;另一种是超时锁,将系统锁定一段时间,然后自动解锁。两种类型的电动锁:
(1)WAKE_LOCK_SUSPEND:阻止系统进入睡眠状态,属于永久锁。超时锁是wake _ lock _ auto _ expire(2)wake _ lock _ idle:它阻止持有锁的系统进入空闲状态。在Android中,使用两个链表来分别保存处于活动状态的挂起锁和空闲锁以及处于非活动状态的唤醒锁。
系统有两种机制来执行锁的添加和释放。第一个是不计数锁,第二个是计数锁。它可以由powermanager指定。wakelock.setreferencecounted(布尔值),默认为计数机制。这两种机制的区别在于,前者可以通过release()直接解锁一次,不管它已经被acquire()解锁了多少次。而后者在(- count==0)时才真正解锁,在(count==0)时才会申请锁定,其他情况下isHeld的状态不会改变。
因此,wakeLock的计数机制并不是真正意义上的申请/释放每一个锁,而是在对同一锁申请/释放的次数进行计数后再执行操作。
3.1wakelock框架层内核启动后,电源管理系统会在文件系统中建立两个节点:/sys/power/wake _ lock/sys/power/wake _ unlock。
应用程序可以通过/sys/power/wake_lock申请WAKE_LOCK_SUSPEND锁,并通过/sys/power/wake_unlock释放锁。如果内核在进入挂起之前检测到锁没有被释放,它将放弃挂起进程,直到锁被释放。Android持有电源锁后,可以让带锁的进程继续执行,即使进入睡眠模式。
如果应用程序崩溃或退出,系统会自动释放它们已经获得的所有权力锁;如果是在服务中获取的,在服务崩溃或注销时会自动释放;框架层的power lock内容是通过PowerManagerService类实现的,用于管理所有应用应用的wakelock,如音视频播放器、摄像头等。例如,静态最终字符串partial _ name='电源管理器服务'
Part of the name is passed to the bottom as a parameter. 106. ADB debugging command echo lockname/sys/power/wake _ lock to lock"lockname"echo lockname/sys/power/wake _ unlock [lock name]四、 Early pause and later summary.
早暂停晚恢复是Android在标准Linux的基础上增加的一个功能。当用户空间应用程序进入挂起状态时,它将首先进入早期挂起状态。外设驱动可以注册早期挂起回调函数,当进入早期挂起状态时,内核会逐个调用这些回调函数。比如进入早期挂起后,回调函数会通过屏幕驱动关闭屏幕和背光,但此时系统仍在正常运行。
进入early suspend状态以后,一旦所有wakelock被释放,系统马上会进入真正的suspend流程.
Android 4.4起,也就是引入ART的版本,摒弃了early suspend机制,改用了fb event通知机制,后续Android版本只有suspend、resume以及runtime suspend、runtime resume。
结语
本文讲述了Android电源管理模块的主要内容,旨在让读者对于Android电源状态及wakelock有一个初步的认识,方便以后深入介绍内核wakelock的实现和Android的待机唤醒流程.
审核刘清
以上知识分享希望能够帮助到大家!
版权声明:本站所有作品图文均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系我们
推荐阅读
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
2023-07-23
栏目热点
怎样降甘油三酯效果好? 吃什么降甘油三酯
LilyGoT手表键盘C3迷你电脑套件
索泰ZBOXEdgeCI342迷你电脑正式上市
谷歌在最新的视频预告片中展示了PixelWatch的独特设计
三星与设计师Juun.J合作推出限量版可折叠产品和配件
从2023年起Fitbit设备将需要Google帐户
TOKKCAMC2+智能WiFi独立日 夜视摄像头
三星正在与全球时尚品牌JUUN.J合作
OnePlusNordWatch的颜色选项通过泄露的渲染揭示
就在第一款Nothing手机发布之前一种新的TWS芽设计浮出水面