Android 中的 wakelock

1. 内核中相关文件
kernel/power/wakelock.c //wakelock核心实现
kernel/power/userwakelock.c //导出用户空间使用的sysfs wakelock接口

2. Framework中的相关文件
PowerManagerService.java

3. /sys/power/wake_lock 和 /sys/power/wake_unlock 是在userwakelock.c中注册的sysfs文件,
cat wake_lock 显示所有锁住的wakelock的名字,cat wake_unlock是所有未锁住的wakelock的名字。

hell@tiny4412:/sys/power # cat wake_lock                                      
PowerManagerService.Display PowerManagerService.WakeLocks noSuspend 
shell@tiny4412:/sys/power # cat wake_unlock                                    
KeyEvents 

4. /proc/wakelocks 文件记录着时间。

5. 上层PowerManagerService.java中是通过sysfs文件中的wake_lock和wake_unlock来操作驱动的。
wakelock既可以在用户空间操作(通过sysfs文件中的wake_lock和wake_unlock来操作驱动的),也可以在内核控件操作(直接wake_lock(XXX_lock))。

6. 可以测试
Linux系统下:
# echo mem > /sys/power/state 然后命令行就不响应了,也就是说系统进入了Suspend状态。

Android下:
# echo mem > /sys/power/state 命令行照样可以输入,cat /sys/power/wake_lock 显示有wake_lock锁住了。

7. WakeLock: 挂起流程先进入Idle状态后再进入Suspend状态,而是否由Idle状态进入Suspend状态是由wake_lock的情况决定的。

8. Wake Lock是一种锁的机制, 只要有人拿着这个锁,系统就无法进入休眠, 可以被用户态程序获取也可以被和内核获得. 这个锁可以是有超时的
也可以是没有超时的, 超时的锁会在时间过去以后自动解锁。如果没有锁了或者超时了, 内核就会启动休眠的那套机制来进入休眠.

9. 有两种机制,第一种是不计数锁机制,另一种是计数锁机制。可以通过 setReferenceCounted(boolean value) 来指定,一般默认为计数机
制。这两种机制的区别在于,前者无论 acquire() 了多少次,只要通过一次 release()即可解锁。而后者正真解锁是在( --count == 0 )
的时候,同样当 (count == 0) 的时候才会去申请加锁。

10. 注意:虽然只有一个wake_lock/wake_unlock文件,但是内核中是使用红黑树维护的所有的wakelock,也就是说wakelock是per模块的,不是
系统级的。

11. 根据Android的电源管理原则,只要有一个wakelock锁存在,系统就不会进入Suspend状态。

12. 对屏幕的操作实际上就是对 /sys/power/state 的操作。写入"mem"表示休眠到内存。但是在Android系统中可能由于加了wakelock锁,其
实就是关闭了屏幕,而没有让CPU进入Suspend状态。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13. Linux中 /sys/power/state 文件不可能取值为"on",on表示通过它来唤醒系统。因为系统Suspend后CPU停转了,不可能再相遇控制台了。
但是Android系统中可能可以,因为有wakelock锁,CPU还可以响应控制台。

 

posted on   Hello-World3  阅读(1737)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示