Android开教程之电源管理相关应用技巧课件_第1页
Android开教程之电源管理相关应用技巧课件_第2页
Android开教程之电源管理相关应用技巧课件_第3页
Android开教程之电源管理相关应用技巧课件_第4页
Android开教程之电源管理相关应用技巧课件_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 Android开发教程之电源管理相关应用技开发教程之电源管理相关应用技 巧巧 Android电源管理应用层的使用电源管理应用层的使用 Android Framework层面层面 Kernel层层 提供给提供给Android Framework层的层的proc 电源管理之Wake lock 在在Kernel层使用层使用wake lock 1 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研

2、发中心 简介 对于刚刚接触Android操作系统的朋友来说, 他们对这一开源的手机操作系统所带来的 功能深深的吸引着。我们在这篇文章中就 通过对Android电源管理的相关概念的解读, 来对这一系统进行深入的了解。 接下来我们从Java应用层面, Android framework层面, Linux内核层面分别进行详 细的讨论: 2 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 www.mobiletrain

3、.org Android开发教程之电源管理应用层的使用开发教程之电源管理应用层的使用 Android提供了现成android.os.PowerManager 类,该类用于控制设备的电源状态的切换. 该类对外有三个接口函数: 1.void goToSleep(long time); /强制设备进入Sleep状态 Note: 尝试在应用层调用该函数,却不能成功,出 现的错误好象是权限不够, 但在Framework下 面的Service里调用是可以的. 3 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 www.embedtrai

4、 Android开发教程开发教程 2.newWakeLock(int flags, String tag);/取得相应层次的锁 flags参数说明: 3.PARTIAL_WAKE_LOCK: Screen off, keyboard light off 4.SCREEN_DIM_WAKE_LOCK: screen dim, keyboard light off 5.SCREEN_BRIGHT_WAKE_LOCK: screen bright, keyboard light off 6.FULL_WAKE_LOCK: screen bright,

5、 keyboard bright ACQUIRE_CAUSES_WAKEUP: 一旦有请求锁时强制打开 Screen和keyboard light ON_AFTER_RELEASE: 在释放锁时reset activity timer Note: 4 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 Android开发教程开发教程 如果申请了partial wakelock,那么即使按Power键,系统也不会进 Sleep,如Music播放时 如果申

6、请了其它的wakelocks,按Power键,系统还是会进 Sleep 7.void userActivity(long when, boolean noChangeLights); /User activity事件发生,设备会被切换到Full on的状态, 同时Reset Screen off timer. 8.Sample code: 9.PowerManager pm = (PowerManager)getSystemService (Context.POWER_SERVICE); 5 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联

7、网技术研发中心 Android开发教程开发教程 10.PowerManager.WakeLock wl = pm.newWakeLock (PowerManager.SCREEN_DIM_WAKE_LOCK, “My Tag”); 11.wl.acquire(); 12. 13.wl.release(); Note: 1.在使用以上函数的应用程序中,必须在其 Manifest.xml文件中加入下面的权限: 14. 6 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互

8、联网技术研发中心 Android开发教程开发教程 15. 2. 所有的锁必须成对的使用,如果申请 了而没有及时释放会造成系统故障.如申请 了partial wakelock,而没有及时释放,那系统 就永远进不了Sleep模式. 7 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 Android开发教程之开发教程之Framework层层 面面 其主要代码文件如下: 16.f

9、rameworksbasecorejavaandroidos PowerManager.java 17.frameworksbaseservicesjavacomandroidserve r PowerManagerService.java 18.frameworksbasecorejavaandroidosPower.java 19.frameworksbasecorejniandroid_os_power.cpp 20.hardwarelibhardwarepowerpower.c 8 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网

10、技术研发中心 Android开发教程开发教程 其中PowerManagerService.java是核心, Power.java 提供底层的函数接口,与JNI层进行交互, JNI层的代码 主要在文件android_os_Power.cpp中,与Linux kernel 交互是通过Power.c来实现的, Android电源管理跟 Kernel的交互主要是通过sys文件的方式来实现的,具 体请参考Kernel层的介绍. 这一层的功能相对比较复杂,比如系统状态的切 换,背光的调节及开关,Wake Lock的申请和释放等等

11、, 但这一层跟硬件平台无关,而且由Google负责维护,问 题相对会少一些,有兴趣的朋友可以自己查看相关的 代码. 9 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 Android开发教程之开发教程之Kernel层层 其主要代码在下列位置: 21.drivers/android/power.c 其对Kernel提供的接口函数有 22.EXPORT_SYMBOL(android_init_suspend_lock); /初始化Suspend loc

12、k,在使用前必须做初始化 23.EXPORT_SYMBOL(android_uninit_suspend_lock); /释放suspend lock相关的资源 24.EXPORT_SYMBOL(android_lock_suspend); /申请lock,必须调用相应的unlock来释放它 25.EXPORT_SYMBOL(android_lock_suspend_auto_expire); 10 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心

13、Android开发教程开发教程 /申请partial wakelock, 定时时间到后会自动释放 26.EXPORT_SYMBOL(android_unlock_suspend); / 释放lock 27.EXPORT_SYMBOL(android_power_wakeup); / 唤醒系统到on 28.EXPORT_SYMBOL(android_register_early_suspend); /注册early suspend的驱动 29.EXPORT_SYMBOL(android_unregister_early_suspen d); /取消已经注册的early suspend的驱动 11

14、 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 提供给提供给Android Framework层的层的proc文件文件 30./sys/android_power/acquire_partial_wake_lock /申请partial wake lock 31./sys/android_power/acquire_full_wake_lock /申请full wake lock 32./sys/android_power/release_wak

15、e_lock /释放相应的wake lock 33./sys/android_power/request_state /请求改变系统状态,进standby和回到wakeup两种 状态 34./sys/android_power/state /指示当前系统的 状态 12 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 电源管理之Wake lock Android电源管理主要是通过Wake lock来实现的,在最 底层主要是通过如下三个队列来实现其管理

16、: 35.static LIST_HEAD(g_inactive_locks); 36.static LIST_HEAD(g_active_partial_wake_locks); 37.static LIST_HEAD(g_active_full_wake_locks); 所有初始化后的lock都会被插入到g_inactive_locks 的队列中,而当前活动的partial wake lock都会被插入到 g_active_partial_wake_locks队列中, 活动的full wake lock 被插入到g_active_full_wake_locks队列中, 所有的partial

17、 wake lock 和full wake lock在过期后或unlock后都会被移 到inactive的队列,等待下次的调用. 13 Android开发教程之电源管理相关应用技 巧 千锋千锋3G嵌入式移动互联网技术研发中心嵌入式移动互联网技术研发中心 Android开发教程之在开发教程之在Kernel层使用层使用wake lock 1. 调用函数android_init_suspend_lock初始化一个wake lock 2. 调用相关申请lock的函数android_lock_suspend 或 android_lock_suspend_auto_expire请求lock,这里只能申请partial wake lock, 如果要申请Full wake lock,则需要调用函数 android_lock_partial_suspend_auto_e

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论