android中真正展示给用户的是window和view,activity在android中所的作用主要是处理一些逻辑问题,比如生命周期的管理、建立窗口等。在android中,窗口的管理还是比较重要的一块,因为他直接负责把内容展示给用户,并和用户进行交互。响应用户的输入等。 View是真正显示的矩形区域,DecorView是顶层View,也就是主View。 相互之间的关系可以理解为一个Activity包含了一个Window,这个Window其实是一个PhoneWindow,在PhoneWindow中包含了DecorView,变量名称为mDecor,mDecor有一个子View,这个子View的布局方式根据设定的主题来确定,在这个子View的xml布局中包含了一个FrameLayout元素,这个FrameLayout元素的id为content,这个content对应于PhoneWindow中的mContentParent变量,用户自定义的布局作为mContentParent的子View存在,一般情况下mContentParnet只有一个子View,如果在Activity调用addView方式实际上是给PhoneWindow中的mContentParent添加子View,由于mContentParent是一个FrameLayout,因此新的子view会覆盖通过setContentView添加的子view。 仅通过setContentView添加子View类View层次与下图类似: (上面的FrameLayout和TextView应该是标题栏,不一定有)。 通过addView方式给Activity添加子view层次图如下所示,右下角两个LinearLayout为用户自定义的布局:


Android 的窗口管理是基于 C/S 模式的,客户端就是应用程序,服务端就是 Window Manager服务。 Activity建立一个主窗口之后,在将主窗口添加到WindowManager 时,首先要建立WindowManager的代理对象,并打开一个Session(session:会话;该session由上面函数中的第二行代码实现,实现 IWindowSession AIDL 接口),并维持该会话(Activity将通过该会话与WindowManager 建立联系,这个Session 是C/S 体系的基础)。Client通过这个Session将window加入到WindowManager中。 public static IWindowSession getWindowSession(Looper mainLooper) {        InputMethodManager imm = InputMethodManager.getInstance(mainLooper);        //获取回话Session,ViewRoot和Window manager通信,        return sWindowSession = IWindowManager.Stub.asInterface(ServiceManager.getService("window"))                                            .openSession(imm.getClient(), imm.getInputContext());  一个完整的窗口概念包含了 View,ViewRoot,Window Manager Service,Window,Decor View,IWindow,ISession,WindowState。他们之间的关系如下: Client 端的 Activity 通过 IWindowSession 会话与Window Manager Service 建立对话,而 Window Manager Service 通过 IWindow 接口访问 Client,将消息传递到Client 端,在通过消息分发渠道,将消息传递到具体的消息处理函数。(用户输入等操作最先是到窗口管理服务,由窗口管理服务发给活动窗口,再一步步传递到焦点)。 通过IWindowSession机制就可以保证Activity和Window manager保持联系,通过IWindow可以将window manager收集到的消息分发出去。  

更多相关文章

  1. 微信稳居Android(安卓)App排行榜4月份国内榜首
  2. [置顶] [转]android开发新浪微博客户端 完整攻略 [新手必读]
  3. 十分钟让你了解Android触摸事件原理(InputManagerService)
  4. Android连载之:第三章第二节:Android用户界面
  5. Android(安卓)之 Window、WindowManager 与窗口管理
  6. Android(安卓)开发 UI 规则
  7. 调查:Android手机用户75%集中在北美
  8. 探索新的Android权限模式
  9. Android(安卓)VS iOS:2011年的死亡竞技赛

随机推荐

  1. 有技术经验的开发人员转型iPhone开发的培
  2. android 仿ios开关控件
  3. android 属性系统,SystemProperties 的简
  4. Android的内存优化
  5. android点击本地缩略图,弹出显示服务器原
  6. Android中的进程与多线程的讲解(Handler和
  7. Android(安卓)API Guides---Data Storage
  8. android 自定义圆形进度条(一)
  9. iOS中的抽屉菜单
  10. Android如何快速实现打渠道打包