【android睡眠唤醒 三】PowerManagerService框架解析

一、电源管理框架
  PowerManagerServcie是android系统电源管理的核心服务,它在Framework层建立起一个策略控制方案,向下决策HAL层以及kernel层来控制设备待机状态,控制显示屏,背光灯,距离传感器,光线传感器等硬件设备的状态。向上提供给应用程序相应的操作接口,比如听音乐时持续保持系统唤醒,应用通知来临唤醒手机屏幕等场景等,PMS也是系统的核心服务,Android的电源管理主要是通过wakelock机制来管理系统的状态,整个android电源管理,可以分为如下四个层次:
  
1. 应用接口层(PowerManager.java)
  PowerManager中开放给应用一系列接口,应用可以调用PM的接口申请wakelock,唤醒系统,或使系统进入睡眠等操作;
  
2. Framework层(PowerManagerService.java)
  应用调用PowerManager开放的接口,来对系统进行一些列的操作是在PowerManagerService中完成的,PowerManagerService计算系统中和Power 相关的计算,是整个电源管理的决策系统。同时协调Power如何与系统其 它模块的交互,比如亮屏,暗屏,系统睡眠,唤醒等等;
  
3. HAL层(Power.c)
  该层只有一个power.c文件,该文件通过上层传下来的参数,向/sys/power/wake_lock 或者/sys/power/wake_unlock文件节点写数据来与kernel进行通信,主要功能是申请/释放锁,维持屏幕亮灭;
  
4. 内核层(kernel/Power)
  内核层实现电源管理的方案主要包含三个部分:
  (1)Kernel/power/:实现了系统电源管理框架机制;
  (2)Arch/arm(ormips or powerpc)/mach-XXX/pm.c:实现对特定板的处理器电源管理;
  (3)drivers/power:是设备电源管理的基础框架,为驱动提供了电源管理接口。
整体框架图如下(借鉴):
这里写图片描述

二、电源管理服务PowerManagerService
1. PowerServiceManager启动流程
  PowerManagerService是在SystemServer中创建的,其中在SystemServer在系统启动的时候会启动三类服务:引导关键服务、核心服务和其他服务,PowerManagerService是作为一个核心服务加入到ServiceManager中,启动服务的方式如下:
  startBootstrapServices(); //启动引导服务
  startCoreServices();//启动核心服务
  startOtherServices();//其他服务
(1)核心服务创建以后,PowerServiceManager的服务随之创建(SystemServer.java):
  mPowerManagerService =
        mSystemServiceManager.startService(PowerManagerService.class);
        
(2)startService方法(SystemServiceManager.java ):
  public T startService(Class serviceClass) {
  mServices.add(service); //注册服务到服务列表中去
   ervice.onStart();//启动服务
   return service;//返回启动的服务
  }
  在startService方法中,利用反射方法构造PowerManagerService的对象,将它添加到本地service变量中,然后调用了PowerManagerService的onStart方法。

(3)PowerManagerService构造方法(PowerManagerService.java)

    public PowerManagerService(Context context) {
      //创建一个HandlerThread,并启动  
        mHandlerThread = new ServiceThread(TAG,
                Process.THREAD_PRIORITY_DISPLAY, false /*allowIo*/);
        mHandlerThread.start();
        //基于这个HandlerThread创建相关的Handler对
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值