- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
android休眠唤醒机制分析
Android的休眠唤醒主要基于wake_lock机制,只要系统中存在任一有效的wake_lock,系统就不能进入深度休眠,但可以进行设备的浅度休眠操作。wake_lock一般在关闭lcd、tp但系统仍然需要正常运行的情况下使用,比如听歌、传输很大的文件等。本文主要分析driver层wake_lock的实现。一、wake_lock 定义和接口[cpp]?view plaincopyenum?{??????WAKE_LOCK_SUSPEND,?//?阻止进入深度休眠模式??????WAKE_LOCK_IDLE,????//?阻止进入空闲模式??????WAKE_LOCK_TYPE_COUNT??};????struct?wake_lock?{??#ifdef?CONFIG_HAS_WAKELOCK??????struct?list_head????link;?????//?链表节点??????int?????????????????flags;????//?标志??????const?char?????????*name;?????//?名称??????unsigned?long???????expires;??//?超时时间??#ifdef?CONFIG_WAKELOCK_STAT??????struct?{??????????int?????????????count;?????????//?使用计数??????????int?????????????expire_count;??//?超时计数??????????int?????????????wakeup_count;??//?唤醒计数??????????ktime_t?????????total_time;????//?锁使用时间??????????ktime_t?????????prevent_suspend_time;??//?锁阻止休眠的时间??????????ktime_t?????????max_time;??????//?锁使用时间最长的一次??????????ktime_t?????????last_time;?????//?锁上次操作时间??????}?stat;??#endif??#endif??};??可以看到wake_lock按功能分为休眠锁和空闲锁两种类型,用于阻止系统进入深度休眠模式或者空闲模式。wake_lock的主要部件有锁名称、链表节点、标志位、超时时间,另外还有一个内嵌的结构用于统计锁的使用信息。接下来我们看看wake_lock对外提供的操作接口:1、内核空间接口[cpp]?view plaincopyvoid?wake_lock_init(struct?wake_lock?*lock,?int?type,?const?char?*name);??void?wake_lock_destroy(struct?wake_lock?*lock);??void?wake_lock(struct?wake_lock?*lock);??void?wake_lock_timeout(struct?wake_lock?*lock,?long?timeout);??void?wake_unlock(struct?wake_lock?*lock);??其中wake_lock_init()用于初始化一个新锁,type参数指定了锁的类型;wake_lock_destroy()则注销一个锁;wake_lock()和wake_lock_timeout()用于将初始化完成的锁激活,使之成为有效的永久锁或者超时锁;wake_unlock()用于解锁使之成为无效锁。另外还有两个接口:[cpp]?view plaincopyint?wake_lock_active(struct?wake_lock?*lock);??long?has_wake_lock(int?type);??其中wake_lock_active()用于判断锁当前是否有效,如果有效则返回非0值;has_wake_lock()用于判断系统中是否还存在有效的type型锁,如果存在超时锁则返回最长的一个锁的超时时间,如果存在永久锁则返回-1,如果系统中不存在有效锁则返回0。2、用户空间接口wake_lock向用户空间提供了两个文件节点用于申请锁和解锁:[cpp]?view plaincopy//?wack_lock文件的读函数,显示用户空间定义的有效锁??ssize_t?wake_lock_show(??????struct?kobject?*kobj,?struct?kobj_attribute?*attr,?char?*buf)??{??????char?*s?=?buf;??????char?*end?=
您可能关注的文档
- analogy类比.ppt
- Analysis-of-Wild-Honey-Suckle-诗歌-野金银花分析.ppt
- and5.1PowerManagerService深入分析(三)updatePowerStateLocked函数.doc
- ANDREW 智能天线.ppt
- android AlarmManager 研究.docx
- Android 4.2 由Context引发的思考.docx
- Android Activity的启动过程.doc
- Android Device Administration 设备管理器——实现一键锁屏.doc
- Android RecyclerView工作原理分析.doc
- Android Service的启动过程.doc
- Android基础总结.docx
- Android后台杀死系列之二:ActivityManagerService与App现场恢复机制.docx
- Android学习笔记030之RecyclerView和CardView实现拖拽和滑动.doc
- Android应用层View绘制流程之DecorView与ViewRootImpl.doc
- android开发各种大全.doc
- Android指针管理:RefBase SP WP.docx
- AndroidStudio基础使用.ppt
- android开机启动流程简单分析.doc
- Android指针管理:RefBase,SP,WP.docx
- Android操作系统原理-01.ppt
文档评论(0)