当用户按下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

更多相关文章

  1. Android官方入门文档[3]构建一个简单的用户界面
  2. 重写对话框
  3. Android中Dialog对话框
  4. Android 超级用户工具箱
  5. Android 深入解析用户界面(二)
  6. Android Studio对话框登录。。。
  7. 自定义对话框Dialog
  8. 2.5.6 使用progressDialog创建进度对话框
  9. 2.5.2 使用alertdialog 创建列表对话框

随机推荐

  1. android 1.5 NDK发布
  2. qpython3:安卓上运行Python
  3. Android(安卓)View Attributes
  4. Android启动模式之singleTask解析
  5. TextView使用完全讲解
  6. Android 异步Http框架简介和实现原理
  7. Android中设置控件可见与不可见
  8. 饭后Android 第一餐-NavigationView+Tool
  9. 【月入41万】Mono For Android中使用百度
  10. kotlin实现Android实现底部对话框BottomD