《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对象,消耗内存
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现