WindowManagerService addWindow的调用流程

创建一个 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方法,然后后面就很清楚了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值