Android suspend/resume flow (上篇: User mode)
来源:互联网 发布:网络压力测试 编辑:程序博客网 时间:2024/06/06 05:51
当用户按下Power button:
0) android/frameworks/base/services/java/com/android/server/WindowManagerService.java
boolean screenIsOff = !mPowerManager.isScreenOn();
boolean screenIsDim = !mPowerManager.isScreenBright();
int actions = mPolicy.interceptKeyTq(event, !screenIsOff); ===> Step 1
if ((actions & WindowManagerPolicy.ACTION_GO_TO_SLEEP) != 0) {
mPowerManager.goToSleep(event.when); ===> Step 2
}
1) android/frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java
interceptKeyTq function
if (type == RawInputEvent.EV_KEY) {
if (code == KeyEvent.KEYCODE_ENDCALL
|| code == KeyEvent.KEYCODE_POWER) {
if (down) {
。。。。。。。。。。。。。。。。。。。
// only try to turn off the screen if we didn't already hang up
mShouldTurnOffOnKeyUp = true;
mHandler.postDelayed(mPowerLongPress,
ViewConfiguration.getGlobalActionKeyTimeout()); ==> 过500ms弹出对话框
result &= ~ACTION_PASS_TO_USER;
}
else {
Log.d(TAG, "Power button up /r/n");
mHandler.removeCallbacks(mPowerLongPress); ==> 如果500ms内有power up键,取消对话框
。。。。。。。。。。。。。。。。。
result |= ACTION_GO_TO_SLEEP;
}
2) android/framework/base/services/java/com/android/server/PowerManagerService.java
public void goToSleep(long time)
{
goToSleepWithReason(time, WindowManagerPolicy.OFF_BECAUSE_OF_USER);
}
3) Jave native interface:
android/frameworks/base/core/jni/android_os_Power.cpp
static int
setScreenState(JNIEnv *env, jobject clazz, jboolean on)
{
return set_screen_state(on);
}
4) android/hardware/libhardware_legacy/power/power.c
int
set_screen_state(int on)
{
QEMU_FALLBACK(set_screen_state(on));
initialize_fds(); ===> open("/sys/power/state", O_RDWR);
if (g_error) return g_error;
char buf[32];
int len;
if(on)
len = sprintf(buf, on_state);
else
len = sprintf(buf, off_state);
len = write(g_fds[REQUEST_STATE], buf, len); ===> echo mem > /sys/power/state
if(len < 0) {
LOGE("Failed setting last user activity: g_error=%d/n", g_error);
}
return 0;
}
5) System will enter suspend mode and it will start normal linux suspend flow
- Android suspend/resume flow (上篇: User mode)
- Android suspend/resume flow (上篇: User mode)
- android suspend/resume
- android suspend and resume
- android suspend/resume(1)
- Android Suspend/resume 过程分析.
- Android suspend and resume process
- Android Suspend/resume 过程分析
- Android Suspend/resume 过程分析.
- Android Suspend/resume 过程分析
- Android Suspend/resume 过程分析
- Android early suspend/late resume
- suspend/resume
- Linux kernel and Android suspend/resume
- Android 4.0 suspend/resume (kernel part)
- Debug Android and Linux suspend and resume
- Android中Linux suspend/resume流程
- android power manager 之 suspend resume过程
- linux下编程实现mplayer播放器总结
- Linux SPI驱动
- 维护数据完整性
- VB中的选择结构
- Node.js 相关有用网站
- Android suspend/resume flow (上篇: User mode)
- 建立排序的单链表
- XML四种解析方法
- modelsim中代码覆盖率使用详解
- 两线程创建两个窗口
- 迭代输出表格,当表格没有数据时
- 排序算法之插入排序
- 常用排序算法递归篇之快速排序
- 关于Servlet与Applet的澄清,进行大文件上传