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();
最新文章
- Linux安全基础:vi的使用
- Bootstrap<;基础四>; 代码
- Spark External Datasets
- Linux内核@系统组成与内核配置编译
- IIS配置错误信息输出
- Windows 7 的系统文件修复:sfc /scannow
- ubuntu基本操作(2)
- JScript中的prototype(原型)属性研究
- 【转】android开发中关于模拟器emulation的常见问题
- OpenCV成长之路:直线、轮廓的提取与描述
- AngularJS入门教程:日期格式化
- EsRejectedExecutionException排错与线程池类型
- HDU 1541 树状数组
- 【bzoj4443 scoi2015】小凸玩矩阵
- AleNet模型笔记
- Pandas分组
- Java知多少(103)网络编程之IP地址和InetAddress类
- 实现tail
- MySQL缓存机制详解(一)
- nodejs初探一二