Android电源管理分析
2011-09-04 10:16
399 查看
Android的电源管理部分,在纵向上分为四层:
第一部分:Application层
主要是利用Android Frameworks提供的API进行应用级的开发,需要注意的是相关权限的申明:
< uses-permission android:name="android.permission.WAKE_LOCK" />
< uses-permission android:name="android.permission.DEVICE_POWER" />
第二部分:Frameworks层
1. / frameworks[/u]/base[/u]/core[/u]/java[/u]/android[/u]/os[/u]/PowerManager.java
v PowerManager:提供对设备的电源进行管理
? 常见锁类型
? 附加锁类型:仅仅是对Screen有影响
v WakeLock:电源管理对象锁
v Usage:
? 获取PowerManager实例PowerManager pm=(PowerManager) getSystemService(Context.POWER_SERVICE);
? 获取PowerManager.WakeLock实例mWakeLock=pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
"TEST");
? Device
On
mWakeLock.acquire();
? Device
Off
mWakeLock.release();
2. / frameworks[/u]/base[/u]/core[/u]/java[/u]/android[/u]/os[/u]/Power.java
提供一些电源管理的函数,如reboot()。其是JNI的上层接口,其往下调用android_os_power.cpp
3. / frameworks[/u]/base[/u]/services[/u]/java[/u]/com[/u]/android[/u]/server[/u]/PowerManagerService.java
电源管理服务,AIDL接口IPowerManager的实现者。
第三部分:JNI层
/frameworks[/u]/base[/u]/core[/u]/jni[/u]/android_os_power.cpp
第四部分:Native层
/hardware[/u]/libhardware[/u]/power[/u]/power.c
与Linux kernel交互
第五部分:Linux驱动层
/drivers[/u]/android[/u]/power.c
第六部分:使用电源管理注意事项
1. 可在onCreate时设置该界面的电源管理,在onDestroy时取消设置
2. 可在onResume时设置该界面的电源管理,在onPause时取消设置
3. 注意设置是以Activity为单位,不是以应用为单位
4. 注意在AndroidManifest.xml中声明该应用有设置电源管理的权限
5. 注意加锁解锁要成对出现
6. 注意多个用途最好用多个锁,不要一锁多用,以免出错
7. 注意对运行在后台和异常时对锁的处理
8. 注意在网络连接或传输时最好加锁,以免传输被中断
9. 注意加锁以保证程序逻辑
第七部分:参阅资料
1.http://jaymsimusic.javaeye.com/blog/764629
2.http://www.rosoo.net/a/201012/10599.html
第一部分:Application层
主要是利用Android Frameworks提供的API进行应用级的开发,需要注意的是相关权限的申明:
< uses-permission android:name="android.permission.WAKE_LOCK" />
< uses-permission android:name="android.permission.DEVICE_POWER" />
第二部分:Frameworks层
1. / frameworks[/u]/base[/u]/core[/u]/java[/u]/android[/u]/os[/u]/PowerManager.java
v PowerManager:提供对设备的电源进行管理
? 常见锁类型
Flag Value | CPU | Screen | Keyboard |
PARTIAL_WAKE_LOCK | On | Off | Off |
SCREEN_DIM_WAKE_LOCK | On | Dim | Off |
SCREEN_BRIGHT_WAKE_LOCK | On | Bright | Off |
FULL_WAKE_LOCK | On | Bright | Bright |
Flag Value | Description |
ACQUIRE_CAUSES_WAKEUP | This flag will force the screen and/or keyboard to turn on immediately. |
ON_AFTER_RELEASE | If this flag is set, the user activity timer will be reset when the WakeLock is released, causing the illumination to remain on a bit longer |
v Usage:
? 获取PowerManager实例PowerManager pm=(PowerManager) getSystemService(Context.POWER_SERVICE);
? 获取PowerManager.WakeLock实例mWakeLock=pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP,
"TEST");
? Device
On
mWakeLock.acquire();
? Device
Off
mWakeLock.release();
2. / frameworks[/u]/base[/u]/core[/u]/java[/u]/android[/u]/os[/u]/Power.java
提供一些电源管理的函数,如reboot()。其是JNI的上层接口,其往下调用android_os_power.cpp
3. / frameworks[/u]/base[/u]/services[/u]/java[/u]/com[/u]/android[/u]/server[/u]/PowerManagerService.java
电源管理服务,AIDL接口IPowerManager的实现者。
第三部分:JNI层
/frameworks[/u]/base[/u]/core[/u]/jni[/u]/android_os_power.cpp
第四部分:Native层
/hardware[/u]/libhardware[/u]/power[/u]/power.c
与Linux kernel交互
第五部分:Linux驱动层
/drivers[/u]/android[/u]/power.c
第六部分:使用电源管理注意事项
1. 可在onCreate时设置该界面的电源管理,在onDestroy时取消设置
2. 可在onResume时设置该界面的电源管理,在onPause时取消设置
3. 注意设置是以Activity为单位,不是以应用为单位
4. 注意在AndroidManifest.xml中声明该应用有设置电源管理的权限
5. 注意加锁解锁要成对出现
6. 注意多个用途最好用多个锁,不要一锁多用,以免出错
7. 注意对运行在后台和异常时对锁的处理
8. 注意在网络连接或传输时最好加锁,以免传输被中断
9. 注意加锁以保证程序逻辑
第七部分:参阅资料
1.http://jaymsimusic.javaeye.com/blog/764629
2.http://www.rosoo.net/a/201012/10599.html
相关文章推荐
- Android电源管理-休眠简要分析
- Android电源管理-休眠简要分析
- Android电源管理-休眠简要分析
- android电源管理-休眠简要分析
- Android5.1--电源管理之省电模式分析
- Android电源管理-休眠简要分析
- [置顶] Android电源管理-休眠简要分析
- Android的电源管理分析
- Android usb子系统的 电源管理 流程分析
- Android电源管理-休眠简要分析
- Android电源管理-休眠简要分析
- Android电源管理-休眠简要分析
- Android51--电源管理之省电模式分析
- Android电源管理-休眠简要分析
- android power_manager 电源管理分析
- android系统启动及wifi框架分析
- Android 自定义View及其在布局文件中的使用示例(三):结合Android 4.4.2_r1源码分析onMeasure过程
- android ListView 九大重要属性详细分析
- Android 系统属性SystemProperty分析
- 深入分析:Android中app之间的交互(二,使用ComponentName)