android 2.3 电量管理

本文详细介绍了Android 2.3的电池管理功能,包括监测电池电量变化、充电状态更新以及用电统计。重点讲解了框架层的UEventObserver监听机制,驱动层面的uevent事件,以及状态读取和显示更新的过程。此外,还提及了用电统计的用途,即帮助用户找出耗电原因。
摘要由CSDN通过智能技术生成
 

1.       介绍

              首先区分一下电源管理, 电池管理和用电统计三个概念。

l         电源管理:前一篇文章讲的是电源管理, 电源管理的目的是节电, 让设备在空闲的时间进入睡眠状态。

l         电池管理: 电池管理的目的是对电池电量和状态的管理, 比如电量变化时和进入充电状态时更新任务栏上的进度条, 当系统低电量时通知用户, 电量低到一定程度时自动关机等。

l         用电统计:用电统计的目的则是统计系统中一些模块, 服务和应用程序的耗电情况, 并反馈给用户。

       这篇文章是关于电池管理和用电统计的。

2.       电池管理

       Android电池管理的功能其实很简单:

l         监测电池电量的变化并更新显示界面

l         监听进入充电状态和退出充电状态消息并更新界面

2.1.      FrameWork

       



2.1.1.          监听

       在BatteryService定义了UEventObserver, uevent是Linux内核用来向用户空间主动上报事件的机制,关于uevent请参见2.1.1.2节, JAVA中的UEventObserver就用来监听uevent的。

private UEventObserver mUEventObserver = new UEventObserver() {

        @Override

        public void onUEvent(UEventObserver.UEvent event) {

            update();

        }

};

然后调用mUEventObserver.startObserving("SUBSYSTEM=power_supply")只监听属性SUBSYSTEM 为“power_supply”的消息。 也就是说当系统进入充电状态和退出充电状态时, 电量变化时就会调用到这个onUEvent函数来处理变化。

2.1.1.1.    UEventObserver的实现

      UEventObserver的实现分为三层,

UEventObserver.java->android_os_UEventObserver.cpp->hardware\libhardware_legacy\uevent\uevent.c

l         API层是com.android.os.UEventObserver

l         JNI层是android_os_UEventObserver.cpp, 很浅

l         Hal层是hardware\libhardware_legacy\uevent\uevent.c, 直接和内核通信

 

       当第一次调用mUEventObserver.startObserving会启动一个UEventThread, next_event会返回监听到的uevent事件, 然后再判断是不是我们所关心的, 如果是就会回调我们注册的onUEvent函数。如下:

private static class UEventThread extends Thread {

        public void run() {

            native_setup();

 

            byte[] buffer = new byte[1024];

            int len;</

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值