zoukankan      html  css  js  c++  java
  • Activity、Window和View三者间的关系有一定的见解

    一、简述如何将Activity展现在手机上

    Tips:

    Activity本身是没办法处理显示什么控件(view)的,是通过PhoneWindow进行显示的

    换句话说:activity就是在造PhoneWindow,显示的那些view都交给了PhoneWindow处理显示

    1、在Activity创建时调用attach方法:

    2、attach方法中会调用PolicyManager.makeNewWindow()

    实际工作的是IPolicy接口的makeNewWindow方法

    ①、其中创建了一个window(可以比喻为一个房子上造了一个窗户):mWindow = PolicyManager.makeNewWindow(this);

    ②、在window这个类中,才调用了setContentView(),这是最终的调用

           在Activity的setContentView方法中,实际上是调用:getWindow().setContentView(view, params);

           这里的getWindow()就是获取到一个Window对象

    Tips:

           为啥attch优先于onCreate调用,就是由于在attch方法中,会创建window,有了window才能调用setContentView

    3、在IPolicy的实现类中创建了PhoneWindow:

    ①、由mWindow = PolicyManager.makeNewWindow(this);,

    ②、这里的makeNewWindow(this);方法中,返回的是:return sPolicy.makeNewWindow(context);

    ③、这个sPolicy实际是一个接口,其实现类是Policy,其中只是创建了一个PhoneWindow

    4、在PhoneWindow的setContentView中向ViewGroup(root)中添加了需要显示的内容

    ①、PhoneWindow是继承Window的

    ②、setContentView这个方法中,需要先判断一个mContentParent是否为空,因为在默认进来的时候,什么都没创建呢

           此时需要创建:installDecor(),DecorView是最根上的显示的

           可以通过adt中的的tools中有个hierarchyviewer.bat的工具,可以查看手机的结构

    ③、DecorView:是继承与FrameLayout的,作为parent存在,最初显示的

    ④、下次再加载的时候,mContentParent就不为空了,会将其中的所有的view移除掉,然后在通过布局填充器加载布局

    二、三者关系:

    1、在Activity中调用attach,创建了一个Window

    2、创建的window是其子类PhoneWindow,在attach中创建PhoneWindow

    3、在Activity中调用setContentView(R.layout.xxx)

    4、其中实际上是调用的getWindow().setContentView()

    5、调用PhoneWindow中的setContentView方法

    6、创建ParentView:

           作为ViewGroup的子类,实际是创建的DecorView(作为FramLayout的子类)

    7、将指定的R.layout.xxx进行填充

    通过布局填充器进行填充【其中的parent指的就是DecorView】

    8、调用到ViewGroup

    9、调用ViewGroup的removeAllView(),先将所有的view移除掉

    10、添加新的view:addView()

    Tips:

           ①、Activity就是在造“窗户”,即创建PhoneWindow

           ②、PhoneWindow才是进行显示view的操作,主要就是setContentView()

  • 相关阅读:
    mysql性能调优
    java面试大全
    JVM调优总结
    大数据行业跳槽面试前你需要做什么
    什么是分布式锁?实现分布式锁的方式
    如何保障mysql和redis之间的数据一致性?
    数据倾斜的原因和解决方案
    hive优化
    c# 系统换行符
    12种增强CSS技能并加快开发速度的资源
  • 原文地址:https://www.cnblogs.com/dubo-/p/6676259.html
Copyright © 2011-2022 走看看