前言:主要描述文章主要内容及要点,可适当UI配图
比如:本文主要讲述了文章写作等构成部分
专业写作码农配图
意义或者目的
描述写作文章或者梳理总结的出发点。比如,本文章的目的在于给一个写作的模版供后面技术写作一个思路指导。
1. 索引目录
用于放在文档首页,呈现全部文档的结构,方便搜索查找的标题、链接等。可采用目录结构,也可以采用单纯的列表样式,例如下面的表格。长文章用到,短文章可以不需要。
写作指南收集 | 文章说明 |
---|---|
1.如何提高技术写作能力? | 知乎问答 |
2.markdown写作语法指南 | 作业部落的写作指引 |
3.掘金专栏写作指南 | 掘金的技术写作指南,有范文 |
2. 项目/组件/业务功能介绍
一段话精简地介绍项目做什么、项目与同类项目比较的突出亮点、项目当前具备的能力。若是组件,介绍其主要完成功能及完成的效果。若是业务性的功能需求,列出需求单,开发负责人,界面效果。
2.1 需求单(业务功能需要)
需求单 | 说明 |
---|---|
客户端需求链接 | 客户端需求描述 |
2.2 主要开发人员(业务功能需要)
张三、李四、阿猫和阿狗
2.3 UI显示效果
例如:Flutter高仿网易云音乐,排行榜和评论界面
3. 快速接入使用(项目/组件)
主要针对项目或者组件的如何快速的使用,提供用户项目使用简单快捷操作指引,能够以最短时间运行或者使用,包含下面几个方面:
- 安装环境要求及说明;
- 安装或者编译方法,若为子工程如何添加到项目,有什么依赖关系;
- API的详细介绍;
- 引入图文或者视频进行展示,有demo会更加友好;
- 可能还需要一个常见问题说明;
例如:http://facebook.github.io/rebound/
4. 方案整体结构或者类关系
描述项目或者组件的整体的层次关系,并描述每个层次的作用及每个层次之间的关系。对于业务功能画出其类图或者基本的分层关系图,并描述每类的作用。
举个例子:微信Android架构历史
5. 方案选型对比或者实现思路、关键路径
5.1 对于项目或者组件来说,重点说明在实现的时候方案的选择,包括如下几个方面:
- 对比方案的实现方法;
- 对比每个实现方案的优缺点;
举个例子:爱奇艺组件化方案开源 Andromeda
其中对比了业界几个方案如下(这里不是很全,这里有个小哥总结的很全)
易用性 | IPC性能 | 支持IPC | 支持跨进程事件总线 | 支持IPC Callback | |
---|---|---|---|---|---|
Andromeda | 好 | 高 | Yes | Yes | Yes |
DDComponentForAndroid | 较差 | -- | No | No | No |
ModularizationArchitecture | 较差 | 低 | Yes | No | No |
另外一种方式:以问题导向的思路的方式行文 :组件化方案调研(IOS)
问题-->组件方案-->改进-->新问题-->持续改进-->实现
5.2 对于业务功能来说,重点说明代码实现的关键路径以及每个类的作用:
比如上面网易云音乐的排行榜界面:举个例子
关键功能路径 | |
---|---|
播放列表功能 | PlayListManager-->playAll(); |
查看评论功能 | CommentManager-->enter(int musicId) |
分享功能 | ShareManager-->shareMusic(int musicId) |
再举个例子:如果你要分析源码类似的,可以用如下的结构:Android 基于 Choreographer 的渲染机制详解
6. 性能对比测试(组件和项目)
对你对方案或者组件有价值或者说服力,需要有性能的对比说明。
举个例子:WCDB的性能数据与Benchmark(IOS) Android Benchmark
如下图,截取了部分对比效果,这里针对不通平台的不通方案之间分别做了性能测试,数据在同一标准下比较有说服力。
读操作性能测试:该测试为从数据库中取出所有数据,并拼装为object。
Nexus 5X Android 7.1.2 (arm64-v8a)
Create | Insert Transaction | Insert Separated | Insert Rollback | Update One SQL | Update Transaction | |
---|---|---|---|---|---|---|
Framework | 49 | 1081 | 7121 | 91 | 71 | 510 |
Framework(W) | 53 | 1112 | 1789 | 80 | 69 | 497 |
SQLCipher | 28 | 857 | 15208 | 75 | 73 | 397 |
SQLCipher(E) | 303 | 971 | 16900 | 72 | 115 | 444 |
WCDB | 28 | 1027 | 6601 | 88 | 80 | 492 |
WCDB(E) | 243 | 1093 | 17283 | 94 | 91 | 546 |
WCDB(W) | 36 | 1077 | 1491 | 73 | 68 | 475 |
WCDB(EW) | 212 | 1051 | 3574 | 76 | 85 | 492 |
7. 协议或者第三方依赖说明
采用了哪些协议,第三方依赖怎么加入的,一些扩展方案,比如热重载、插件化如何实现的。
8. 常见的问题及坑
对于项目、组件、业务代码来说,总会有各种遗留问题点,或者需要特殊注意的地方。这里可以做详细说明,做一个类似Q&A的地方。
例如:Android动态模糊实现的研究中的注意事项
8.1 OpenGL ES Context在多线程环境下的管理
OpenGL在多线程环境下工作需要额外的处理,为了正常工作需要遵守两条规则:
- 一个线程只能有一个渲染上下文(Render context)
- 一个context只能绑定一个线程
因此在多线程环境下的实现context共享的处理方式如下:
- 将context与线程1绑定:
eglMakeCurrent(display, surface, surface, context);
- 在线程1执行OpenGL操作…
- 将context与线程1解绑:
eglMakeCurrent(display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
- 将context与线程2绑定:
eglMakeCurrent(display, surface, surface, context);
- 在线程2执行OpenGL操作…
9. 引用文章及说明
引用了哪些其他的文章一一列举。
这里推荐一些写的比较出色的文章:
推荐文章 | 描述 |
---|---|
Android动态模糊实现的研究 | 方案型文章代表。有条理、思路清晰; 从背景知识点到方案实现再到性能分析 |
Android 基于 Choreographer 的渲染机制详解 | 源码总结分析类型文章代表 原理讲解到代码分析,图文详细 |