Android中窗口的创建过程在阅读本文之前建议先阅读我的另外一篇Java层Binder机制详解,因为里面有些地方涉
Android中窗口的创建过程
在阅读本文之前建议先阅读我的另外一篇Java层Binder机制详解,因为里面有些地方涉及到通过进程间通过Binder机制通信。
在Android将窗口分为三类:应用窗口,子窗口,系统窗口
应用窗口一般需要和一个Activity对应,子窗口是有父窗口的窗口,系统窗口时由系统创建的窗口,用户是无法创建系统窗口的(Toast,输入法窗口,壁纸窗口除外)
这里我主要分析一下应用窗口的创建过程,如果不对的地方希望能提出。
上面说了应用窗口时和Activity对应的,所以应用窗口时伴随Activity创建而创建的,所以首先从Activity的创建开始,Android的所有的应用的入口函数是ActivityThread的main函数,经过辗转调用就会执行到handleLaunchActivity,那我们就从handleLaunchActivity开始吧
然后我们通过mContentParent.addView(view, params);将我们的View添加到mContentParent中。
好吧,那我们接着进行分析吧
经过辗转的调用,下面就会调用到Activity中的
public static IWindowSession getWindowSession(Looper mainLooper) { synchronized (mStaticInit) { if (!mInitialized) { try { InputMethodManager imm = InputMethodManager.getInstance(mainLooper); sWindowSession = IWindowManager.Stub.asInterface( ServiceManager.getService("window")) .openSession(imm.getClient(), imm.getInputContext()); mInitialized = true; } catch (RemoteException e) { } } return sWindowSession; } }也就是说其实调用的是WindowManagerService.Session.add的方法,而在WindowManagerService.Session.add中是调用的WindowManagerService.addWindow方法,好了,窗口的创建完成了。
