怎么做网站推,赣州新闻联播视频,河南网页设计,怎么制作网站主页1、healthed服务监听接收内核kernel的电池事件#xff0c;然后上传数据给framware层的batterysevice#xff0c;BatteryService计算电池的电量#xff0c;显示#xff0c;绘制动画等
android电池系统框架#xff1a;
2、healthd服务入口#xff1a;android/system/cor…1、healthed服务监听接收内核kernel的电池事件然后上传数据给framware层的batteryseviceBatteryService计算电池的电量显示绘制动画等
android电池系统框架
2、healthd服务入口android/system/core/healthd/healthd.cpp 中main函数
healthd_mode_ops是一个关于充电状态的结构体变量main里面做healthed初始化并做一个主循环持续
main函数中首先根据传入的参数不同区分开机充电、recovery、关机充电。这三种情况然后指定不同的healthd_mode_ops回调函数
int main(int argc, char **argv) {
。。。。。。。。。。。。。。。//healthd_mode_ops是一个关于充电状态的结构体变量healthd_mode_ops android_ops;//开机充电时指向android_ops
。。。。。。。。。。。。。。。。。。。ret healthd_init(); //healthed初始化
。。。。。。。。。。。。。。。。。。。healthd_mainloop(); //主循环
}3、healthed_init函数:
static int healthd_init() {epollfd epoll_create(MAX_EPOLL_EVENTS);//创建一个epoll变量if (epollfd -1) {KLOG_ERROR(LOG_TAG,epoll_create failed; errno%d\n,errno);return -1;}//和板子级别的初始化里面其实是一个空函数什么也没做healthd_board_init(healthd_config);//根据系统所处的模式有三种情况的init开机充电关机充电recoveryhealthd_mode_ops-init(healthd_config);//wakealarm定时器初始化wakealarm_init();//uevent事件初始化用以监听电池的uevent事件。uevent_init();//BatteryMonitor初始化。gBatteryMonitor new BatteryMonitor();//创建batteryMonitor对象gBatteryMonitor-init(healthd_config);//初始化batteryMonitor打开/sys/class/power_supply//遍历该节点下的电池参数初始化healthd的config参数return 0;
}4、wakeupalarm_init函数
static void wakealarm_init(void) {//创建一个wakealarm对应的定时器描述符wakealarm_fd timerfd_create(CLOCK_BOOTTIME_ALARM, TFD_NONBLOCK);if (wakealarm_fd -1) {KLOG_ERROR(LOG_TAG, wakealarm_init: timerfd_create failed\n);return;}//将wakealarm事件注册到wakealarm_fd文件节点上以监听wakealarm事件。if (healthd_register_event(wakealarm_fd, wakealarm_event))KLOG_ERROR(LOG_TAG,Registration of wakealarm event failed\n);//设置alarm唤醒间隔wakealarm_set_interval(healthd_config.periodic_chores_interval_fast);
}5、BatteryService电池监听广播服务
frameworks/base/services/core/java/com/android/server/BatteryService.java
//将电池监听注册到底层
public void onStart() {IBinder b ServiceManager.getService(batteryproperties);final IBatteryPropertiesRegistrar batteryPropertiesRegistrar IBatteryPropertiesRegistrar.Stub.asInterface(b);try {//注册电池监听当底层电池电量发生变化调用此监听并调用update。batteryPropertiesRegistrar.registerListener(new BatteryListener());} catch (RemoteException e) {// Should never happen.}publishBinderService(battery, new BinderService());publishLocalService(BatteryManagerInternal.class, new LocalService());
}//当底层有信息时会调用update更新BatteryService中相关值。 private void update(BatteryProperties props) {synchronized (mLock) {if (!mUpdatesStopped) {mBatteryProps props;// Process the new values.processValuesLocked(false);} else {mLastBatteryProps.set(props);}}}processValuesLocked函数更新上报的电池信息 电池电量、充电状态、低温关机、低电关机、电池状态、适配器插拔等 在这里 //发送电池状态变换广播 sendIntentLocked();