编程进阶网 编程进阶网
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++开发技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • Android智能硬件
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Linux实践开发
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • 性能优化实践

  • 程序编程原理

    • README
    • 序卷方法论

    • 数据的本质

    • 运行时模型

    • 并发的设计

    • 内存的真相

    • 交互和系统

      • README
        • 🎯 这一卷要回答什么
        • 📖 篇章总览(8 篇)
        • 🔗 知识脉络
        • 🌉 与其他卷的承接
        • 💡 学完你能回答
        • 🛣 推荐阅读顺序
      • 1.窗口核心设计思想
      • 2.视图加载渲染设计
      • 3.图形渲染管线原理
      • 4.手势事件设计灵魂
      • 5.消息机制设计思想
      • 6.跨进程通信设计
      • 7.数据加密和解密
  • 稳定性与可靠性

  • 工程化与运维

  • 方案设计思想

  • 专栏
  • 程序编程原理
  • 交互和系统
杨充
2026-05-14
目录

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

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
上次更新: 2026/06/07, 10:26:12
8.数据拷贝设计原理
1.窗口核心设计思想

← 8.数据拷贝设计原理 1.窗口核心设计思想→

最近更新
01
信号崩溃快速排查
06-15
02
CoreDump破案
06-15
03
perf火焰图实战
06-15
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 桂ICP备2024034950号 | 桂公网安备45142202000030
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式