Android睡眠唤醒机制--系统架构

本文深入探讨Android的睡眠唤醒机制,包括Wake Lock、Early Suspend和Late Resume。介绍了Android如何通过内核模块管理睡眠状态,并详细解析了从应用程序到内核的调用流程。此外,还讲解了在用户态和内核态如何获取和释放wakelock,以及系统进入睡眠(suspend)的过程。
摘要由CSDN通过智能技术生成

首先给大家分享一个巨牛巨牛的人工智能教程,是我无意中发现的。教程不仅零基础,通俗易懂,而且非常风趣幽默,还时不时有内涵段子,像看小说一样,哈哈~我正在学习中,觉得太牛了,所以分享给大家!点这里可以跳转到教程

               

一、简介

     Android在Linux内核原有的睡眠唤醒模块上基础上,主要增加了下面三个机制:

     • Wake Lock 唤醒锁机制;
     • Early Suspend 预挂起机制;
     • Late Resume 迟唤醒机制;

     其基本原理:当启动一个应用程序的时候,它可以申请一个wake_lock唤醒锁,每当申请成功之后都会在内核中注册一下(通知系统内核,现在已经有锁被申请,系统内核的wake_lock_store把它加入红黑树中),当应用程序在某种情况下释放wake_lock的时候,会注销之前所申请的wake_lock。特别要注意的是:只要是系统中有一个wake_lock的时候,系统此时都不能进行睡眠。但此时各个模块可以进行early_suspend。当系统中所有的wake_lock都被释放之后,系统就会进入真正的kernel的睡眠状态。在系统启动的时候会创建一个主唤醒锁main_wake_lock,该锁是内核初始化并持有的一个WAKE_LOCK_SUSPEND属性的非限时唤醒锁。因此,系统正常工作时,将始终因为该锁被内核持有而无法进入睡眠状态。也就是说在不添加新锁的情况下,只需将main_wake_lock 解锁,系统即可进入睡眠状态。

      从Android最上层(Java的应用程序),经过Java、C++和C语言写的Framework层、JNI层、HAL层最后到达android的最底层(Kernel层)。

   

     下图是Android睡眠唤醒模块框架:

 二、相关代码

    • Frameworks

      // 供给上层应用程序调用的接口
      frameworks/base/core/java/android/os/PowerManager.java 

      // 具体实现PowerManager类中的接口
      frameworks/base/services/java/com/android/server/PowerManagerService.java        

      // 被PowerManagerService类调用

      frameworks/base/core/java/android/os/ Power.java

    • JNI

     // 实现Power类中的JNI接口
     frameworks/base/core/jni/android_os_Power.cpp

    • HAL

      // 进行sysfs用户接口的操作
      hardware/libhardware_legacy/power/power.c

    • Kernel

      kernel/kernel/power/main.c
      kernel/kernel/power/earlysuspend.c
      kernel/kernel/power/suspend.c
      kernel/kernel/power/wakelock.c
      kernel/kernel/power/userwakelock.c

     在应用程序框架层中,PowerManager类是面向上层应用程序的接口类,提供了Wake Lock机制(同时也是睡眠唤醒子系统)的基本接口(唤醒锁的获取和释放)。上层应用程序通过调用这些接口,实现对系统电源状态的监控。

     • PowerManager类通过IBinder这种Android中特有的通信模式,与PowerManagerService 类进行通信。  

     • PowerManagerService 是PowerManager 类中定义的接口的具体实现,并进一步调用Power 类来与下一层进

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值