View, Activity, Window三者之间的关系剖析详解

    xiaoxiao2021-11-04  102

    相关链接:View, Activity, Window三者之间的关系剖析详解

    对于屏幕显示而言,整个是window,这个window里显示的东西是view(activity是逻辑上的东西,增加了生命周期管理等. 里面具体的东西也是view。而且启动activity的实现也是往window里加view),往window里加view,是通过调用WindowManager(WindowManagerImpl).addView()来实现的。

    在addView里,会为每个view创建一个viewRoot(这是逻辑上的东西,用来负责view的事件处理和逻辑处理,并和WindowsManagerService建立联系),而在WindowManagerImpl里,会维护viewRoot的数组。

    最终会调用ViewRoot.setView(),在setView里会显示该view等。在setView的实现里,会调用Session.add()来addWindow,通过这个方法,会将ViewRoot和WindowManagerService联系起来(比如说分发事件等),并且这个方法里会调用PhoneWindowManager.prepareAddWindowLw()。 调用过程如下:

    ViewRoot.setView()->WindowManagerService.relayout()-> WindowManagerService.relayoutWindow()-> WindowManagerService.performLayoutAndPlaceSurfacesLocked()-> WindowManagerService.performLayoutAndPlaceSurfacesLockedInner()-> WindowManagerService.performLayoutLockedInner()-> PhoneWindowManager.beginLayoutLw() 然后ViewRoot.setView()->WindowManagerService.finishDrawing()陆续又会调用到一些PhoneWindowManager里的layout方法。 对于WindowManager而言,只要调用了AddView,上述的流程都会走一遍。

    对于一个Window而言,目前大概可以分为几个部分:statusbarview(0,0,320,25),应用的activity(0, 25,320,480)

    Activity中UI框架基本概念

      Activity 是应用程序的基本组成部分,提供了可视的界面,与用户进行交互;

    具体Acitivity是怎么样显示这些事视图元素以及响应事件交互的。

    一Activity相关概念

    Activity:Activity包含一个Window,该Window在Activity的attach方法中通过调用

    PolicyManager.makeNewWindo创建;

    View:最基本的UI组件,表示屏幕上的一个矩形区域;

    DecorView:是Window中View的RootView,设置窗口属性;

    Window:表示顶层窗口,管理界面的显示和事件的响应;每个Activity 均会创建一个PhoneWindow对象,是Activity和整个View系统交互的接口

    WindowManager:一个interface,继承自ViewManager。所在应用进程的窗口管理器;

    有一个implementation WindowManagerImpl;

    主要用来管理窗口的一些状态、属性、view增加、删除、更新、窗口顺序、消息收集和处理等。

    ViewRoot:通过IWindowSession接口与全局窗口管理器进行交互:界面控制和消息响应;

    ActivityThread:应用程序的主线程,其中会创建关联当前Activity与Window;

    创建WIndowManager实现类实例,把当前DecoView加入到WindowManager;

        

    二 实现流程框架图

             Activity上Window的创建关联流程如下:

      

        

    相关类结构:

      

          

    层级关系:

        

    原文: http://blog.csdn.net/jonemill/article/details/42006889


    关于Java和Android大牛频道

    Java和Android大牛频道是一个数万人关注的探讨Java和Android开发的公众号,分享和原创最有价值的干货文章,让你成为这方面的大牛!

    我们探讨android和Java开发最前沿的技术:android性能优化 ,插件化,跨平台,动态化,加固和反破解等,也讨论设计模式/软件架构等。由群来自BAT的工程师组成的团队

    关注即送红包,回复:“百度” 、“阿里”、“腾讯” 有惊喜!!!关注后可用入微信群。群里都是来自百度阿里腾讯的大牛。

    欢迎关注我们,一起讨论技术,扫描和长按下方的二维码可快速关注我们。搜索微信公众号:JANiubility。

    公众号:JANiubility

    转载请注明原文地址: https://ju.6miu.com/read-677988.html

    最新回复(0)