README
# 第 5 卷|交互与系统
从硬件触点到屏幕像素,从消息循环到跨进程通信——用户交互与系统协作背后的事件驱动架构。
# 🎯 这一卷要回答什么
App 用了十年,你写的每一行 setText、onClick、addEventListener 背后到底发生了什么?
- 屏幕上的"按钮"——它真的是个"按钮"吗?还是只是一片像素 + 一段事件路由代码?
- 当你点击屏幕,从硬件中断到
onClick被调用,OS 与运行时一共做了多少事? - 一个看似简单的透明遮罩为什么能把 60fps 拉到 30fps?GPU 渲染管线到底在忙什么?
- iOS 的 ResponderChain、Android 的 dispatchTouchEvent、Web 的事件冒泡——三套机制看似各异,底层是同一件事吗?
- Handler / Looper / MessageQueue —— 为什么所有 GUI 框架都长这样?
- 一台机器扛 10 万并发连接是怎么做到的?select / poll / epoll / io_uring 的演进解决了什么?
- HTTPS 的握手到底在握什么?AES、RSA、SHA 这些算法当初是为了解决什么矛盾?
这一卷把"看得见的 UI"和"看不见的系统"层层撕开,让你看到下面渲染、事件、消息、IPC、网络、加密这六条独立但相通的脉络。
# 📖 篇章总览(8 篇)
| 序号 | 文档 | 核心矛盾 |
|---|---|---|
| 5.1 | 窗口核心设计思想 | 为什么窗口是"矩形 + 事件 + 坐标系"——窗口系统的本质 |
| 5.2 | 视图加载渲染设计 | measure / layout / draw 三大阶段为何是这种顺序 |
| 5.3 | 图形渲染管线原理 | GPU 流水线 / 双缓冲 / 合成 / VSync 的工程艺术 |
| 5.4 | 手势事件设计灵魂 | 触点流 → 状态机 → 手势语义的多层抽象 |
| 5.5 | 消息机制设计思想 | Handler / Looper / MessageQueue 为何是 GUI 的标配 |
| 5.6 | 跨进程通信设计 | 进程隔离要安全 vs 协作要通信——管道/共享内存/Binder 全景 |
| 5.7 | 数据加密和解密 | 对称 / 非对称 / 哈希 —— 三种密码学武器各自的矛盾 |
# 🔗 知识脉络
flowchart TB
subgraph 屏幕呈现四部曲
A[5.1 窗口<br/>"在哪画"]
B[5.2 视图渲染<br/>"画什么"]
BB[5.3 GPU管线<br/>"像素怎么上屏"]
C[5.4 手势事件<br/>"用户怎么交互"]
end
subgraph 系统协作
D[5.5 消息机制<br/>事件如何被调度]
F[5.6 跨进程通信<br/>系统服务如何被调用]
G[5.7 网络IO<br/>跨机器协作]
E[5.8 加密解密<br/>数据如何被保护]
end
A --> B --> BB --> C --> D
D --> A
F --> G
G --> E
style A fill:#fff3cd
style B fill:#fff3cd
style BB fill:#fff3cd
style C fill:#fff3cd
style F fill:#d1ecf1
style G fill:#d1ecf1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
5.1 / 5.2 / 5.3 / 5.4 是"屏幕呈现四部曲":窗口决定画在哪、视图决定画什么、GPU 管线决定像素怎么上屏、手势决定用户怎么操作。5.5 是这四者的调度中枢——所有事件最终都流入消息循环。5.6 / 5.7 是系统协作维度:本机 IPC 与跨机网络。5.8 是数据安全维度,独立但与网络传输紧密相连,闭合了整个专栏的环。
# 🌉 与其他卷的承接
- 承接第 3 卷:消息机制 = 单线程模型 + 事件循环 + 无锁队列,是第 3 卷范式篇的实战延伸;网络 IO 模型也直接关联第 3 卷的 Reactor。
- 承接第 4 卷:手势事件每秒产生 60+ MotionEvent,对象池是第 4 卷拷贝原理的典型应用;零拷贝、共享内存又呼应虚拟内存。
- 延伸第 1 卷:加密章节回到了"数据如何被表示"这一最初命题,闭合了整个专栏的环。
# 💡 学完你能回答
- 为什么 Android 主线程必须有 Looper,子线程默认没有?子线程开 Looper 之后会不会内存泄漏?
- iOS 的 RunLoop、Android 的 Looper、JS 的 Event Loop —— 三者本质是不是同一个东西?差异在哪?
- 一个
RecyclerView滚动时为什么会卡?布局 / 测量 / 绘制 / 合成哪一步最容易成为瓶颈? - 为什么 HTTPS 握手要先用非对称、然后切到对称?性能 trade-off 算下来到底差多少?
- 手势冲突的"父子拦截"在 Android 是
onInterceptTouchEvent,在 iOS 是requireGestureRecognizerToFail,两种机制是不是同一种思想的两种表达? - 为什么 Android Binder 能做到"一次拷贝",而 Linux 经典 IPC 需要两次?mmap 在这里扮演了什么角色?
- Redis 单线程为什么能扛 10w QPS?Netty 的主从 Reactor 比它强在哪?
- 为什么 io_uring 被称为"下一代"——比 epoll 强在何处?
# 🛣 推荐阅读顺序
5.1 窗口(先理解"舞台")
↓
5.2 视图渲染(再理解"演员")
↓
5.3 GPU 管线(再理解"舞台灯光")
↓
5.4 手势事件(再理解"观众的互动")
↓
5.5 消息机制(再理解"幕后调度")
↓
5.6 跨进程通信(理解"幕后的幕后——系统服务")
↓
5.7 数据加密(独立支线,保护数据传输安全)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
上次更新: 2026/06/07, 10:26:12