一、Android 电池服务

Android电池服务,用来监听内核上报的电池事件,并将最新的电池数据上报给系统,系统收到新数据后会去更新电池显示状态、剩余电量等信息。如果收到过温报警和低电报警,系统会自动触发关机流程,保护电池和机器不受到危害。

Android电池服务的启动和运行流程:

Android

电池服务的源码结构

Framework\base\services\java\com\android\server

├── SystemServer.java

创建BatteryServices、PowerManagerService、ActivityManagerService

├── BatterySevices.java

监听底层上报的battery事件,广播电池发生改变的消息

Framework\base\services\java\com\android\server\am

├── ActivityManagerService.java

创建BatteryStatsService

├── BatteryStatsService.java

统计和记录电池参数的信息

Framework\base\services\java\com\android\server\power

├── PowerManagerService.java

监听电池发生变化的广播消息,并调节系统的电源状态,例如亮屏

Framework\base\core\java\com\internal\os\

├── BatteryStatsImpl.java

统计和记录电池参数的信息,并通知其他模块

System\core\healthd

├── healthd.cpp

创建uevent socket,监听内核上报的内核事件

├── BatteryMonitor.cpp

初始化本地电池数据结构,将power_supply路径下属性节点路径填充进去,

├── BatteryMonitor.h

├── BatteryPropertiesRegistrar.cpp

创建电池属性监听器,并将其注册到Android的系统服务中

├── BatteryPropertiesRegistrar.h

二、Healthd

该模型向下监听来自底层的电池事件,向上传递电池数据信息给Framework层的BatteryService用来计算电池电量相关信息,

BatteryService通过传递来的数据来计算电池电量等信息,因此healthd在电池管理系统中起着承上启下的作用。

healthd的具体调用流程深入分析android5.1 healthd这篇文章讲得很清楚。

三、驱动

Android电源管理底层用的是Linux

power_supply框架,内核提供给电池驱动的接口是结构体power_supply结构体。

struct power_supply {

const char *name;

enum power_supply_type type;

enum power_supply_property *properties;

size_t num_properties;

char **supplied_to;

size_t num_supplicants;

int (*get_property)(struct power_supply *psy,

enum power_supply_property psp,

union power_supply_propval *val);

int (*set_property)(struct power_supply *psy,

enum power_supply_property psp,

const union power_supply_propval *val);

int (*property_is_writeable)(struct power_supply *psy,

enum power_supply_property psp);

void (*external_power_changed)(struct power_supply *psy);

void (*set_charged)(struct power_supply *psy);

/* For APM emulation, think legacy userspace. */

int use_for_apm;

/* Driver private data */

void *drv_data;//add by bhj

/* private */

struct device *dev;

struct work_struct changed_work;

spinlock_t changed_lock;

bool changed;

struct wake_lock work_wake_lock;

struct delayed_work deferred_register_work;

#ifdef CONFIG_LEDS_TRIGGERS

struct led_trigger *charging_full_trig;

char *charging_full_trig_name;

struct led_trigger *charging_trig;

char *charging_trig_name;

struct led_trigger *full_trig;

char *full_trig_name;

struct led_trigger *online_trig;

char *online_trig_name;

struct led_trigger *charging_blink_full_solid_trig;

char *charging_blink_full_solid_trig_name;

#endif

};

内核主要通过get_property这个函数指针来获得驱动中的有关电池的信息,而这个函数在内核中只给出了声明,我们在写驱动的时候要自己实现这个函数,即将自己写的函数赋值给这个函数指针,当内核需要驱动中电源信息的时候就回调这个get_property函数。另外,我们写驱动程序的时候又要给用户提供接口,内核中提供给用户的接口就是sysfs,通过读取sysfs文件系统中文件内容,就可以得到电源的信息。内核主要通过两个文件power_supply_class.c和power_supply_core.c,我们调用其中的函数就可以把电源(电池,USB或AC)的信息展现给用户,有关电源的属性写在/sys/class/powersupply文件夹下(此文件夹为程序运行后所生成的)。

电池系统从底层向Framework层上报数据的流程:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

android电池管理软件,Android实现电池管理系统相关推荐

  1. android 屏幕管理软件,Android Screencast下载

    Android Screencast旨在将您的Android手机或平板电脑的屏幕活动记录到视频中.创建教程,将你的游戏记录到高清视频中,准备在网络上共享.屏幕录像机使用方便,输出设置为比特率,视频大小 ...

  2. Ubuntu系统电池管理软件TLP(Thinkpad设置电池充电阈值)

    Ubuntu系统电池管理软件TLP(Thinkpad设置电池充电阈值) 说明 最近给手里的Thinkpad x200s安装了Unbuntu系统,为了优化电池管理,延长电池寿命,考虑安装电池管理软件(虽 ...

  3. Wattagio for Mac(Mac电池管理软件)v1.12.11

    Wattagio for Mac 是一款强大的电池监控检测维护管理工具.它会告知您当前的电池健康状况,并有助于降低功耗.Wattagio 中的灵活设置为您提供了自定义配置文件以满足您的需求的选项.作为 ...

  4. android电池管理软件,精准电量「Accubattery」Pro for Android v1.4.4 直装解锁专业版 —— 非常好用的电池健康检测维护管理软件...

    精准电量「Accubattery」Pro 是一款非常好用的电池健康检测维护管理软件,其基于一系列科学的研究和测试「信息数据量都很大,这里就不详解了"我不会告诉你是我解不了!"」,能 ...

  5. android物品管理软件,物品寄存管理系统下载

    本应用为手机单机运行版本. 我们还可以提供电脑单机版和网络版,网络版可以实现手机和电脑数据信息同步操作和共享使用. <物品寄存管理系统>是一款针对公共场所如旅游景区.公园.超市.车站等物品 ...

  6. 华硕电池管理软件_多模式无线电竞鼠标怎么选?华硕?ROG 烈刃2 上手体验

    本身一直都是一名鼠标控,年纪大了.也没有说多喜欢打游戏,反倒更喜欢收集旗舰无线鼠标.最近看到华硕ROG系列更新了一款烈刃2无线鼠标,与之前烈刃最大的变化就是无线模式的加入.三种连接模式日常可以方便切换 ...

  7. Android日程管理软件开发

    安卓日程管理 1.    程序图标 2.    点击图标,进入如下界面: 这个界面会有缓冲效果,然后进入程序的主界面. 3.程序主界面: 手指在屏幕上左右滑动可以对日期进行切换,切换的时候画面有过渡效 ...

  8. android+计划管理软件,日程计划管理软件下载-日程计划管理app安卓版v1.10-电玩之家...

    日程计划管理是一款好用的日常生活进程管理应用软件,日程计划管理拥有多种代办事项提醒模式,用户可以自行进行选择使用.日程计划管理支持日程表管理功能,协助用户高效管理办公事项,日程计划管理支持云端备份功能 ...

  9. android+计划管理软件,安卓日程管理软件哪个好?

    原标题:安卓日程管理软件哪个好? 日程管理,是一项职场人士都应该掌握的技能,因为随着工作节奏的持续加快,工作中的待办事项也在逐渐增多,所以如果他们不提前做好工作日程的规划管理,很可能会被繁琐的工作事项 ...

最新文章

  1. 通过女票的淘宝历程,大白话讲解大数据各个方向的分工
  2. 3D数学基础:图形与游戏开发---随笔一
  3. AAAI论文首发:几何驱动的自监督的人体3D姿态估计方法
  4. 移动搜索引擎-网页信息预处理
  5. 2021奥斯汀 Pwn2Own黑客大赛落幕,Master of Pwn 诞生
  6. 天梯—输出GPLT(C语言)
  7. java jvm 查看内存_JVM内存状况查看方法和分析工具(下)
  8. CentOS配置Tomcat开机启动
  9. 【转】VirtualDOM与diff(Vue实现).MarkDown
  10. et中计算机的快捷键,新手求助ET软件快捷键(求实用型的)
  11. vue 前端打印pdf
  12. #10015. 「一本通 1.2 练习 2」扩散(二分+最短路径)
  13. 红外额温枪方案ZHW3548作主控开发程序
  14. MySQL-01.深入理解MySQL底层数据结构
  15. Java发起GET请求的二三事
  16. 学习银行业务----存款
  17. VS编译release版本的出现的LNK1104 无法打开文件“libboost_filesystem-vc140-mt-1_58.lib
  18. android p2p 连接服务器上,当通过Wi-Fi P2P使用网络服务发现时无法连接到Android设备每个人都可以使用网络服务发现...
  19. Leek' music diary 1
  20. 下雪 -- Free .Net Snow

热门文章

  1. 基于linux+windows Qt+Mysql 开发的在线答题系统
  2. hp台式计算机u盘启动设置,如何在HP计算机上设置USB引导? HP电脑BIOS设置程序U盘启动教程...
  3. python教程(面向初学者)【1】
  4. 易百纳rv1126 201版本开箱
  5. 计算机无法对NAS硬盘操作,使用计算机为Synology NAS安装DSM操作系统
  6. 系统资源不足,无法满足请求服务 --解决方法之一
  7. java基于ssm的电影院订票选座系统
  8. SwaggerHub 更快,标准化的API设计软件
  9. docker hub搭建自有仓库
  10. Trusted_Connection