2016-03-08 13:06:38 465浏览
在目前随着移动互联网科技飞速的发展,如今IT行业越来越火爆,国内的移动开发者也紧跟潮流,尤其是在Android平台占据主导地位的今天。Android的开发相对较为简单,国内的开发者多数以应用开发为主,对内核开发懂得并不是太多,今天给大家介绍一些关于Android内核开发方面的一些知识,方便开发者朋友对Android平台能够有更深入的了解。
1、窗口相关概念解读
做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类。
2、窗口切换逻辑设计中需要解决的问题
Android中的窗口管理系统中,首先在AmS中保存所有与Activity相关的信息,在Activity启动和关闭时,AmS会通知WmS同步Activity窗口的状态,而在WmS中使用WindowState类保存一个窗口的信息,这些窗口信息需要根据Activity的状态而动态改变。在WmS中另外有一个InputManager对象,该对象内部保存了输入消息处理时所需要的窗口信息,借助这些信息,InputDispatcher能够决定输入消息应该对应哪个窗口,WindowState类的信息必须与InputManager内部的窗口信息也保持同步。
切换过程中要解决的问题可归纳为三类,第一类是状态同步问题,即AmS如何把状态传递给WmS,WmS如何保存这些状态,又如何把这些状态传递给InputManager;第二类问题是屏幕绘制问题,即当AmS启动或者关闭一个Activity时,用户一般会看到一个动画,那么WmS如何定义这个动画,并如何在动画绘制前先隐藏目标窗口,直到动画结束后才显示目标窗口,而要实现这种动画的绘制就需要一种特别的变量来保存动画窗口和目标窗口的关系;第三类问题是消息处理问题,即在窗口切换的过程中,是老窗口应该继续捕获用户消息。
Android系统已经受到了移动互联网用户的广泛关注,很多用户都喜欢Android系统,其方便轻松的应用,决定了其发展的地位以及在市场上所占据的比重。扣丁Android培训就业班首期班在北京扣丁学堂总部开班,首期班招生50人,人满为止,5月4日开课。