• 《Android源码设计模式》--Builder模式


    No1:

    将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    No2:

    在Android源码中,最常用到的Builder模式就是AlertDialog.Builder

    No3:

    WindowManager在java层的具体实现是WindowManagerImpl,Window对象的setWindowManager函数将Window对象与WindowManager建立了联系

    添加View、移除View、更新View的布局等具体的工作都交给了WindowManagerGlobal这个类

    WindowManager的addView方法实际上调用的是WindowManagerGlobal中的addView方法

    调用ViewRootImpl的setView方法将View显示到手机窗口中

    No4:

    ViewRootImpl继承自Handler类,是作为native层与Java层View系统通信的桥梁

    No5:

    Android Framework与WindowManagerService之间也是通过Binder机制进行通信

    No6:

    WindowManagerService管理的并不是Window,而是View,只不过它管理的是属于某个Window下的View

    No7:

    在draw()函数中会获取到需要绘制的区域,以及判断是否使用GPU进行绘制。通常情况下使用的是CPU绘制,也就是调用的是drawSoftware函数来绘制。

    No8:

    视图树绘制步骤

    1)判断是使用CPU绘制还是GPU绘制

    2)获取绘制表面Surface对象

    3)通过Surface对象获取并且锁住Canvas绘图对象

    4)从DecorView开始发起整棵树的绘制流程

    5)Surface对象解锁Canvas,并且通知SurfaceFlinger更新视图

    No9:

    WindowManagerService系统

    No10:

    优点

    1)良好的封装性,使用建造者模式可以使客户端不必知道产品内部组成的细节

    2)建造者独立,容易扩展

    缺点:会产生多余的Builder对象以及Director对象,消耗内存

  • 相关阅读:
    es5预览本地文件、es6练习代码演示案例
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 838 推多米诺(暴力模拟)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 837 新21点(DP)
    Java实现 LeetCode 836 矩形重叠(暴力)
    Subversion under Linux [Reprint]
    Subversion how[Reprint]
  • 原文地址:https://www.cnblogs.com/anni-qianqian/p/7755445.html
Copyright © 2020-2023  润新知