Android电源管理
2014-07-13 21:52
204 查看
转:http://blog.csdn.net/qianjin0703/article/details/6676567
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()
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()
相关文章推荐
- Android WiFi 电源管理
- Android电源管理
- StevGuo系列文章翻译之Android电源管理
- Android电源管理
- Android电源管理,低电量报警
- android的电源管理
- Android 电源管理
- android 之 PowerManager 与电源管理
- android PowerManager(电源管理) wakelock(屏幕锁)
- Android电源管理
- Android 的电源管理
- Android的电源管理
- Android平台开发-Power management-电源管理
- Android 电源管理 (部分转载)
- android电源管理
- [转] Android电源管理
- Android电源管理
- 详解Android电源管理API
- StevGuo系列文章翻译之Android电源管理
- Android电源管理