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

  • 相关阅读:
    Bzoj 3173: [Tjoi2013]最长上升子序列 平衡树,Treap,二分,树的序遍历
    Bzoj 1657: [Usaco2006 Mar]Mooo 奶牛的歌声 单调栈
    Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图
    Bzoj 1674: [Usaco2005]Part Acquisition dijkstra,堆
    Bzoj 3110: [Zjoi2013]K大数查询 树套树
    Cogs 309. [USACO 3.2] 香甜的黄油 dijkstra,堆,最短路,floyd
    面试题24:二叉排序树的后序遍历序列
    面试题23:从上往下打印二叉树
    面试题22:栈的压入、弹出序列
    面试题21:包含min函数的栈
  • 原文地址:https://www.cnblogs.com/lkq1220/p/6480422.html
Copyright © 2020-2023  润新知