创建一个 WindowState 的 流程 :
01-17 20:57:33.765 436 545 E WindowManager: Window Session Crash
01-17 20:57:33.765 436 545 E WindowManager: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
01-17 20:57:33.765 436 545 E WindowManager: at com.android.server.wm.WindowState.<init>(WindowState.java:964)
01-17 20:57:33.765 436 545 E WindowManager: at com.android.server.wm.WindowState.<init>(WindowState.java:845)
01-17 20:57:33.765 436 545 E WindowManager: at com.android.server.wm.WindowManagerService.addWindow(WindowManagerService.java:1565)
01-17 20:57:33.765 436 545 E WindowManager: at com.android.server.wm.Session.addToDisplayAsUser(Session.java:176)
01-17 20:57:33.765 436 545 E WindowManager: at android.view.IWindowSession$Stub.onTransact(IWindowSession.java:679)
01-17 20:57:33.765 436 545 E WindowManager: at com.android.server.wm.Session.onTransact(Session.java:139)
01-17 20:57:33.765 436 545 E WindowManager: at android.os.Binder.execTransactInternal(Binder.java:1154)
01-17 20:57:33.765 436 545 E WindowManager: at android.os.Binder.execTransact(Binder.java:1123)
01-17 20:57:33.766 2022 2022 D AndroidRuntime: Shutting down VM
01-17 20:57:33.766 436 563 I InputDispatcher: Dropping event because there is no touchable window or gesture monitor at (1221, 380) in display 0.
01-17 20:57:33.768 2022 2022 E AndroidRuntime: FATAL EXCEPTION: main
01-17 20:57:33.768 2022 2022 E AndroidRuntime: Process: com.example.test2, PID: 2022
01-17 20:57:33.768 2022 2022 E AndroidRuntime: java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.String.length()' on a null object reference
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.os.Parcel.createExceptionOrNull(Parcel.java:2379)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.os.Parcel.createException(Parcel.java:2357)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:2340)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.os.Parcel.readException(Parcel.java:2282)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.view.IWindowSession$Stub$Proxy.addToDisplayAsUser(IWindowSession.java:1546)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.view.ViewRootImpl.setView(ViewRootImpl.java:1031)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:409)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:109)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4536)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:52)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:177)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:98)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2066)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:106)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.os.Looper.loop(Looper.java:223)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:7671)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:592)
01-17 20:57:33.768 2022 2022 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)
看上面的堆栈信息就很可以非常容易的看出来:
在app进程中 handleResumeActivity 中调用 ViewRootImpl.setView 方法,这个方法然后通过ipc调用 system server 服务端的 Session.addToDisplayAsUser方法,然后后面就很清楚了。