「原」从android层面分析early suspend


Android4.0 在PowerManagerService中,当执行setScreenStateLocked时会通过jni调用
hardware/libhardware_legacy/power/power.c中的set_screen_state,
进行关屏与开屏的操作。

关屏时,向/sys/power/state写入"mem"
开屏时,向/sys/power/state写入"on"

而kernel在接到"mem"时,不但会关屏,还会进入early suspend状态。
early suspend是允许有锁存在的。
如果没有锁存在,又进入early suspend状态,就可能会进入kernel的睡眠状态,suspend。

如果上层既不想抓屏幕的锁,想要灭屏,又不想灭屏后进入kernel的suspend的状态,
可以抓一个PowerManager.PARTIAL_WAKE_LOCK的锁,这样,就等于直接抓了
kernel中的wake_lock锁,也即向/sys/power/wake_lock中写入模块的名字,表示这个模块抓了wack_lock
的锁,可以用cat /sys/power/wake_lock看到kernel锁的状态。

hal层的许多service就是直接抓kernel的wake_lock锁的,只不过它们不是通过PowerManagerService抓的,而是直接在下层包
含libhardware_legacy这个库操作的。

具体可以看下图:
「原」从android层面分析early suspend - xxhalbert - xxhalbert的博客
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值