我们可以看到framework层中的BatteryService.JAVA的onStart函数中有如下代码:
public void onStart() { IBinder b = ServiceManager.getService("batteryproperties");final IBatteryPropertiesRegistrar batteryPropertiesRegistrar =IBatteryPropertiesRegistrar.Stub.asInterface(b);try {batteryPropertiesRegistrar.registerListener(new BatteryListener());} catch (RemoteException e) {// Should never happen.}我们在初始化的时候已经提到过,当healthd初始化时候会创建BatteryPropertiesRegistrar的对象并将其publish注册到系统服务中,注册服务的语句如下:
defaultServiceManager()->addService(String16("batteryproperties"), this);
所以BatteryService在这里获取该服务,并以此注册其监听器为BatteryListener(),该监听器监听到BatteryProperties改变便会调用到BatteryService的update函数,去做电池电量相关计算以及显示 。
至此更新操作基本分析完成,其简要流程如下图所示

文章插图
总结Healthd是framework层传递来自底层电池事件信息并调用相关模块更新电池状态的一个中间层,其向下监听来自底层PMU驱动上报的uevent电池事件,向上调用BatteryService去计算电池,电量,使用等相关信息,它通过一个阻塞式的死循环不断监听底层三个文件节点上的事件信息,当监听到事件便调用到BatteryMonitor执行更新操作,通过BatteryService.java中注册监听电池属性改变的函数,当电池属性信息发生改变,即回调到BatteryService中做更新操作,更新完成一次电池事件的上报到更新整个流程就完成;总之Healthd是连接Battery模块framework中java层与HAL层交互的主要通道 。
【android6.0系统Healthd深入分析】
推荐阅读
- 安溪引进有身份证茶追溯系统确保茶叶安全
- 六大运动疗法有效调理消化系统改善肠胃
- 手把手教你用 KODI tMM 打造家庭影院系统
- 京东商城交易系统的演进
- 成为“黑客”前,必学的“系统命令”
- thinkphp常用系统配置大全
- win10系统无法进入安全模式解决方法
- 终于知道为什么黑客学习过程首选的系统是Linux系统而不是windows
- 为什么要有分布式系统?
- 霞浦标准园创建区建成首个茶叶自动喷灌系统
