Android系统开发--Android灯光系统之电池灯的流程分析

前期系统准备

  • 运行初始化,创建系统服务

  • 创建电池服务,获得电池灯;创建监听者监听上报电池事件;

    • mSystemServiceManager.startService(BatteryService.class);

    • mLed = new Led(contegetLocalService(LightsManager.class)); //实例化灯对象

    • mBatteryLight = lights.getLight(LightsManager.LIGHT_ID_BATTERY); //获得电池灯

    • batteryPropertiesRegistrar.registerListener(new BatteryListener());

      publishBinderService("battery", new BinderService());

      publishLocalService(BatteryManagerInternal.class, new LocalService()); //创建电池状态监听者

    • private final class BatteryListener extends IBatteryPropertiesListener.Stub {

      @Override

      public void batteryPropertiesChanged(BatteryProperties props) {

       final long identity = Binder.clearCallingIdentity();
      
       try {
      
           BatteryService.this.update(props);
      
       } finally {
      
           Binder.restoreCallingIdentity(identity);
      
       }

      }

}  //判断是否电池状态是否发生变化,如果发生变化,则将该事件通知
  • 创建电量控制服务;获得电池服务;注册电池广播监听;

    • mPowerManagerService = mSystemServiceManager.startService(PowerManagerService.class); //创建电量管理服务

    • mPowerManagerService.systemReady(mActivityManagerService.getAppOpsService());

      mBatteryManagerInternal = getLocalService(BatteryManagerInternal.class); //获取电池服务后通知系统准备就绪

    • 注册电池广播接收器

      临听ACTION_BATTERY_CHANGED(电池状态改变)

驱动上报事件处理流程

  • Linux底层驱动上报电池事件

  • BatteryListener的监听函数batteryPropertiesChanged被调用

  • 广播ACTION_BATTERY_CHANGED更新电池灯

  • BatteryService.java:update()

     processValuesLocked(false);  //通知电池服务更新电池灯
    • sendIntentLocked(); //通知到电池接收广播

    • mLed.updateLightsLocked(); //更新电池灯

  • 收到广播消息后执行BatteryReceiver.onReceive

  • handleBatteryStateChangedLocked(); //处理电池状态变化

  • PowerManagerService.java: handleBatteryStateChangedLocked()

updatePowerStateLocked(); //更新电源状态

  • PowerManagerService.java: updatePowerStateLocked()

updatePowerStateLocked();

Android系统开发--灯光系统之电池灯的流程分析的更多相关文章

  1. 【Android 系统开发】CyanogenMod 13.0 源码下载 编译 ROM 制作 ( 手机平台 : 小米4 | 编译平台 : Ubuntu 14.04 LTS 虚拟机)

                 分类: Android 系统开发(5)                                              作者同类文章X 版权声明:本文为博主原创文章 ...

  2. Android系统开发 编译系统签名的APP

    前言 一般情况下,我们使用的签名都是自己生成的Java签名来编译APP. 但是,如果需要开发一些特定设备的APP(对权限有更高的要求,需求一些系统基本的权限,比如让APP可以控制设备的休眠),那就需要 ...

  3. 《Android系统开发》笔记

    <Android系统开发>笔记1:Android系统概述 Android四层架构: 1. Linux Kernel&driver层 a.依赖于Linux 2.6内核,包含安全性.内 ...

  4. Android系统开发实务实训

    实训项目 :               Android系统开发实务实训                           项目成品名称:         绝地坦克                 ...

  5. Android 系统开发做什么?

    题外话 18 年我从 Android 应用开发转 Framework 层开发了,从此开启了 996 幸福生活,博客技术文更新基本停滞了,被工作占据了过多的精力,实在没时间像以前一样拟稿.写作,实践.反 ...

  6. Android 9.0 默认输入法的设置流程分析

    Android 输入法设置文章 Android 9.0 默认输入法的设置流程分析 Android 9.0 添加预置第三方输入法/设置默认输入法(软键盘) 前言 在上一篇文章  Android 9.0 ...

  7. 【Android 系统开发】 Android 系统启动流程简介

    作者 : 万境绝尘 (octopus_truth@163.com) 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/3889548 ...

  8. 【Android 系统开发】 编译 Android文件系统 u-boot 内核 并烧写到 OK-6410A 开发板上

    博客地址 : http://blog.csdn.net/shulianghan/article/details/40299813  本篇文章中用到的工具源码下载 : -- ok-6410A 附带的 A ...

  9. Android 系统开发学习杂记(转)

    http://blog.csdn.net/shagoo/article/details/6709430 > 开发环境1.安装 Eclipse 和 android-sdk 并解压安装2.Eclip ...

随机推荐

  1. ASP.NET动态网站制作(27)-- 三层框架(1)

    前言:今天主要介绍一下三层框架,给大家一个整体的概念.分层概念使得程序低耦合,更加健壮,扩展性更好. 内容: 1.三层: UI(表现层):主要是指与用户交互的界面.用于接收用户输入的数据和显示处理后用 ...

  2. cookie小细节

    设置cookie时,不像设置session,可以马上生效,它的生效时间是下一次请求页面.

  3. 扩展mysql - 手把手教你写udf

    1 MySQL简介 MySQL是最流行的开放源码SQL数据库管理系统,相对于Oracle,DB2等大型数据库系统,MySQL由于其开源性.易用性.稳定性等特点,受到个人使用者.中小型企业甚至一些大型企 ...

  4. python3 - 使用__slots__限制实例属性

    为了限制实例的属性,可以在定义class的时候,定义一个特殊的__slots__变量,来限制class实例能添加的属性.比如,只允许对Persion实例添加name 和 age 属性 class Pe ...

  5. NewtonSoft.Json NULL转空字符串

    from:http://www.cnblogs.com/hetuan/articles/4565702.html NewtonSoft.Json对需要转为JSON字符串的对象的NULL值以及DBNul ...

  6. 49、android ListView几个比较特别的属性

    由于这两天在做listView的东西,所以整理出来一些我个人认为比较特别的属性,通过设置这样的属性可以做出更加美观的列表 android:stackFromBottom="true" ...

  7. 1307 绳子与重物(DFS)

    1307 绳子与重物 题目来源: Codility 基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题 有N条绳子编号 0 至 N - 1,每条绳子后面栓了一个重物重量 ...

  8. Android实现splash

    笔者近日遇到一个android中双splash的问题.要求先实现百度的logo,在接入自己的logo. public class MainActivity extends BaseActivity { ...

  9. 关于jquery的取消阻止默认事件

    最近帮朋友做个东西,整个屏幕有一个遮罩层,但是这个遮罩层能滑动,于是百度了一下,返现,用 $('body').bind("touchmove",function(e){ e.pre ...

  10. 企业实施DevOPS的七大挑战(转)

    从别人的演讲视频中摘抄,做笔记. 什么是DevOPS 如何衡量DevOPS 企业实施DevOPS的七大挑战 自动化测试投入不足 单元测试 API测试 界面测试 功能测试 高度集中的IT服务 标准化 脚 ...