文章转载自:http://blog.csdn.net/hzdysymbol/archive/2009/03/19/4004791.aspx Android Power Management 总体上来说Android的电源管理还是比较简单的,主要就是通过锁和定时器来切换系统的状态,使系统的功耗降至最低,整个系统的电源管理架构图如下: (注该图来自Steve Guo) Android电源管理简介(上)_第1张图片 接下来我们从Java应用层面, Android framework层面, Linux内核层面分别进行详细的讨论:

应用层的使用:

Android提供了现成android.os.PowerManager,该类用于控制设备的电源状态的切换.

该类对外有三个接口函数:

void goToSleep(long time); //强制设备进入Sleep状态

Note:

尝试在应用层调用该函数,却不能成功,出现的错误好象是权限不够,但在Framework下面的Service里调用是可以的.

newWakeLock(int flags, String tag);//取得相应层次的锁

flags参数说明:

PARTIAL_WAKE_LOCK: Screen off, keyboard light off

SCREEN_DIM_WAKE_LOCK: screen dim, keyboard light off

SCREEN_BRIGHT_WAKE_LOCK: screen bright, keyboard light off

FULL_WAKE_LOCK: screen bright, keyboard bright

ACQUIRE_CAUSES_WAKEUP:一旦有请求锁时强制打开Screenkeyboard light

ON_AFTER_RELEASE:在释放锁时reset activity timer

Note:

如果申请了partial wakelock,那么即使按Power,系统也不会进Sleep,Music播放时

如果申请了其它的wakelocks,Power,系统还是会进Sleep

void userActivity(long when, boolean noChangeLights);//User activity事件发生,设备会被切换到Full on的状态,同时Reset Screen off timer.

Sample code:

PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);

PowerManager.WakeLock wl = pm.newWakeLock (PowerManager.SCREEN_DIM_WAKE_LOCK, “My Tag”);

wl.acquire();

…….

wl.release();

Note:

1.在使用以上函数的应用程序中,必须在其Manifest.xml文件中加入下面的权限:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

<uses-permission android:name="android.permission.DEVICE_POWER"/>

2.所有的锁必须成对的使用,如果申请了而没有及时释放会造成系统故障.如申请了partial wakelock,而没有及时释放,那系统就永远进不了Sleep模式.

注意:关于PowerManager的详细内容请参照《PowerManager》

Android Framework层面:

其主要代码文件如下:

frameworks\base\core\java\android\os\PowerManager.java

frameworks\base\services\java\com\android\server\PowerManagerService.java

frameworks\base\core\java\android\os\Power.java

frameworks\base\core\jni\android_os_power.cpp

hardware\libhardware\power\power.c

其中PowerManagerService.java是核心, Power.java提供底层的函数接口,JNI层进行交互, JNI层的代码主要在文件android_os_Power.cpp,Linux kernel交互是通过Power.c来实现的, AndriodKernel的交互主要是通过sys文件的方式来实现的,具体请参考Kernel层的介绍.

这一层的功能相对比较复杂,比如系统状态的切换,背光的调节及开关,Wake Lock的申请和释放等等,但这一层跟硬件平台无关,而且由Google负责维护,问题相对会少一些,有兴趣的朋友可以自己查看相关的代码.

更多相关文章

  1. 如何在Android系统源码中添加一个C项目?
  2. Android系统之System Server大纲
  3. Android系统默认Home应用程序(Launcher)的启动过程源代码分析(3)
  4. android获得系统GPU参数 gl.glGetString
  5. 72、android状态栏一体化,状态栏改变颜色
  6. Android控件ToggleButton多状态按钮使用详解
  7. Android中调取系统相机和相册功能

随机推荐

  1. Android(安卓)Studio 的项目结构
  2. Android中View的量算、布局及绘图机制
  3. android通用文件操作
  4. android 页面滑动
  5. Android开发工具之DDMS
  6. Android 启动另外activity并返回结果
  7. Android Manager之AudioManager(音频管理
  8. ubuntu下搭建android遇到的问题:SDK Manag
  9. android之创建和读取自定义资源文件
  10. 【流媒體】Android 实时视频采集方案一