【IT168技术】随着移动互联网的越来越火爆,国内的移动开发者也紧跟潮流,尤其是在Android平台占据主导地位的今天。Android的开发相对较为简单,国内的开发者多数以应用开发为主,对内核开发懂得并不是太多,今天给大家介绍一些关于Android内核开发方面的一些知识,方便开发者朋友对Android平台能够有更深入的了解。同时希望这些知识能够像大餐中的甜点,给大家的美食增添色彩。

▲
窗口相关概念解读
做Android开发的朋友会经常提到以下概念,窗口、Window类、ViewRoot类以及W类,本文简单介绍这些概念的联系和区别。
窗口(Window):这是一个纯语义的说法,即程序员所看到的屏幕上的某个独立的界面,比如一个带有Title Bar的Activity界面、一个对话框、一个Menu菜单等,这些都称之为窗口。这里所说的窗口管理一般也都泛指所有这些窗口,在Android的英文相关文章中则直接使用Window这个单词。而从WmS的角度来讲,窗口是接收用户消息的最小单元,WmS内部用特定的类表示一个窗口,以实现对窗口的管理。WmS接收到用户消息后,首先要判断这个消息属于哪个窗口,然后通过IPC调用把这个消息传递给客户端的ViewRoot类。
Window类:该类在android.view包中,是一个abstract类,该类是对包含有可视界面的窗口的一种包装。所谓的可视界面就是指各种View或者ViewGroup,一般可以通过res/layout目录下的xml文件描述。
ViewRoot类:该类在android.view包中,客户端申请创建窗口时需要一个客户端代理,用以和WmS进行交互,这个就是ViewRoot的功能,每个客户端的窗口都会对应一个ViewRoot类。
W类:该类是ViewRoot类的一个内部类,继承于Binder,用于向WmS提供一个IPC接口,从而让WmS控制窗口客户端的行为。
描述一个窗口之所以使用这么多类的原因在于,窗口的概念存在于客户端和服务端(WmS)之中,客户端所理解的窗口和服务端理解的窗口是不同的,因此,在客户端和服务端会用不同的类来描述窗口。同时,无论是在客户端还是服务端,对窗口都有不同层面的抽象,比如在客户端,用户能看到的窗口一般是View或者ViewGroup组成的窗口,而与Activity对应的窗口却是一个DecorView类,而具备常规Phone操作接口的窗口却又是一个PhoneWindow类。