• Activity窗口结构


     每一个Activity组件都有一个关联的ContextImpl对象,同时,它还关联有一个Window对象,用来描述一个具体的应用程序窗口。由此又可知,Activity只不过是一个高度抽象的UI组件,它的具体UI实现其实是由其它的一系列对象来实现的

    一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的创建关联流程如下:

      

        

    相关类结构:

      

          

    层级关系:

      (此图网上盗用...)

        

      1. 一个Activity组件所关联的应用程序窗口对象的类型为PhoneWindow。

      2. 这个类型为PhoneWindow的应用程序窗口是通过一个类型为LocalWindowManager的本地窗口管理器来维护的。

      3. 这个类型为LocalWindowManager的本地窗口管理器又是通过一个类型为WindowManagerImpl的窗口管理器来维护应用程序窗口的。

      4. 这个类型为PhoneWindow的应用程序窗口内部有一个类型为DecorView的视图对象,这个视图对象才是真正用来描述一个Activity组件的UI的。

  • 相关阅读:
    NIO[读]、[写]在同一线程(单线程)中执行,让CPU使用率最大化,提高处理效率
    解码(ByteBuffer): CharsetDecoder.decode() 与 Charset.decode() 的不同
    ACCESS与SQL Server下SQL Like 查询的不同
    试着用c写了一个多线程的同步
    收藏:c语言的多线程同步
    java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver] 不能使用 '(未知的)';文件已在使用中
    Linux进程管理
    MySQL数据备份
    MySQL索引
    Socket.IO 概述
  • 原文地址:https://www.cnblogs.com/jasonxcj/p/4750275.html
Copyright © 2020-2023  润新知