关闭

Android电源管理 .

443人阅读 评论(0) 收藏 举报

Android电源管理方面网上资料比较多,这里就梳理下Android源码的线索,关注wake_lock和early_suspend。

使一个应用程序不进入睡眠,须在上层申请一个wakelock锁,并对该锁进行持有。在acquire()和release()间,进程保持running状态。持有锁acquire()经过framework层PowerManagerService.java到抽象层Power.cpp,实质就是在/sys/power/wake_lock里写入锁的名字,释放锁release()实质就是在/sys/power/wake_unlock里写入锁的名字。经Linux文件系统,内核对其上锁或解锁,即wake_lock()或wake_unlock(),即不准suspend或进入suspend。

搞清楚has_wake_lock_locked(),返回值>0说明有超时锁,需要在超时以后进入suspend;返回值=0说明没有锁,直接进入suspend;返回值<0说明持有永久锁,这也是最常见的一种用法,系统无法进入suspend。


使系统唤醒或休眠,上层分别使用userActivity和goToSleep,实质就是往/sys/power/state里写入on或mem,底层通过文件系统最终调用request_suspend_state()




0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:309276次
    • 积分:3803
    • 等级:
    • 排名:第8687名
    • 原创:22篇
    • 转载:306篇
    • 译文:0篇
    • 评论:13条
    最新评论