zoukankan      html  css  js  c++  java
  • Android系统开发--灯光系统之电池灯的流程分析

    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();

  • 相关阅读:
    JDBC 删除数据两种方式,PreparedStatement表示预编译的 SQL 语句的对象,防止sql注入
    MySQL 主键外键
    JDBC 增删改查
    MySQL数据库语句
    反射
    如何安装、配置、登陆MySQL
    如何干净卸除MySQL数据库
    IO流总结
    字符流五种读写 字符流 BufferedWriter BufferedReader 带缓冲区的字符流
    单例模式
  • 原文地址:https://www.cnblogs.com/lkq1220/p/6480422.html
Copyright © 2011-2022 走看看