Android 电源管理基础框架图

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()






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值