• Activity中UI框架基本概念


    Activity中UI框架基本概念

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

    具体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和View的关系是什么?

    跟踪Activity的源码就会发现:
    Activity.attch() -> PolicyManager -> Policy -> PhoneWindow -> mLayoutInflater.inflate()&mContentParent.addView()
    这只是一个简单的跟踪过程描述。通过跟踪源代码,就可以很清晰的看出他们三者的关系。 

    Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图)
    LayoutInflater像剪刀,Xml配置像窗花图纸。

    1)一个Activity构造的时候会初始化一个Window,准确的说是PhoneWindow
    2)这个PhoneWindow有一个“ViewRoot”,引号是说其实这个“ViewRoot”是一个View或者说ViewGroup,是最初始的根视图。
    3)“ViewRoot”通过addView方法来一个个的添加View。比如TextView,Button等
    4)这些View的事件监听,是由WindowManagerService来接受消息,并且回调Activity函数。比如onClickListener,onKeyDown等

    2、Activity是android的显示视图么?
    不是

    3、LayoutInflater是做什么的 ? layoutInflater.inflater()做什么的?
    一般来讲,我们用LayoutInflater做一件事:inflate。inflate这个方法总共有四种形式,目的都是把xml表述的layout转化为View。
    This class is used to instantiate layout XML file into its corresponding View objects . It is never be used directly -- use 
    getLayoutInflater() or getSystemService(String)getLayoutInflater() or getSystemService(String) to retrieve a standard 
    LayoutInflater instance that is already hooked up to the current context and correctly configured for the device you are 
    running on 


    三.实现流程框架图

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


    相关类结构:



    层级关系:








  • 相关阅读:
    java SSM 框架 多数据源 代码生成器 websocket即时通讯 shiro redis 后台框架源码
    PHP5.5.13 + Apache2.4.7安装配置流程详解
    mybatis-generator 自动生成mapper以及实体类
    spring cloud之Feign的使用
    spring cloud 初体验
    redis 分布式锁
    Activiti 工作流之所学所感(基本配置) DAY1
    druid 连接池加密算法
    ssm+redis整合(通过aop自定义注解方式)
    aop (权限控制之功能权限)
  • 原文地址:https://www.cnblogs.com/bingghost/p/5720725.html
Copyright © 2020-2023  润新知