首先是到PhoneWindowManager下找到关机会触发的那个函数
powerShortPressShutDown
这个函数里会调用
sendCloseSystemWindows
然后在ActivityManagerService中
closeSystemDialogs(
然后有mWindowManager.closeSystemDialogs
这里是binder通信调用WindowManager的实现
public void closeSystemDialogs(String reason) {
synchronized(mWindowMap) {
final int numDisplays = mDisplayContents.size();
for (int displayNdx = 0; displayNdx < numDisplays; ++displayNdx) {
final WindowList windows = mDisplayContents.valueAt(displayNdx).getWindowList();
final int numWindows = windows.size();
for (int winNdx = 0; winNdx < numWindows; ++winNdx) {
final WindowState w = windows.get(winNdx);
if (w.mHasSurface) {
try {
w.mClient.closeSystemDialogs(reason);
} catch (RemoteException e) {
}
}
}
}
}
}
这里就是屏幕的黑屏了,但是各种服务的关闭是在黑屏后的,由于我做的就是显示相关暂时分析到这里。
我会在WM这里通过binder控制Surfaceflinger达到我的显示效果。
wm这里不仅关机会调用 还有别的流程在调用,所以直接在power哪里控制。1