- 博客(201)
- 资源 (1)
- 收藏
- 关注
原创 24.思考架构设计的未来性和特殊性
0. 总览1. 架构设计决策的未来性2. 设计出特殊性3. 如何兼顾未来性和特殊性0. 总览1. 架构设计决策的未来性2. 设计出特殊性3. 如何兼顾未来性和特殊性
2022-02-19 21:58:05
323
原创 23.观摩Session模式与Proxy-Stub模式的搭配
0. 总览1. Session设计模式:以CameraService服务为例2. Session设计模式:以VM的JNIEnv对象为例3. Session设计模式:典型架构4. 复习:Proxy-Stub模式5. Proxy-Stub设计模式:以cameraService为例6. SurfaceFlinger服务的Session模式7. SurfaceFlinger服务的Proxy-Stub模式0. 总览1. Session设计模式:以CameraService服务为例.
2022-02-19 20:43:50
524
原创 22.从框架看HAL和Linux驱动开发
1. Linux驱动框架的函数表2. 活用工厂EIT造型1. Linux驱动框架的函数表2. 活用工厂EIT造型
2022-02-19 19:46:52
929
原创 21.HAL的框架和Stub开发
0. 总览1. 复习:C语言2. 认识HAL的架构3. 扩充hw_module_t4. 扩充hw_device_t5. HAL插件Stub的代码范例6. 总结7.观摩Android的实际HAL-Stub范例0. 总览1. 复习:C语言2. 认识HAL的架构3. 扩充hw_module_t4. 扩充hw_device_t5..
2022-02-19 18:35:06
1510
原创 20.HAL的商业意义
0.总览1. HAL的角色2. HAL的商业意义3. 框架设计:维护底层的变动自由度0.总览1. HAL的角色2. HAL的商业意义3. 框架设计:维护底层的变动自由度
2022-02-19 17:54:54
163
原创 19. 核心服务CallBack的IBinder设计
0. 总览1. 正向调用核心服务2. 核心服务的远程回调3. Native Service范例代码实现4. Client模块范例代码实现5. 总结0. 总览1. 正向调用核心服务2. 核心服务的远程回调3. Native Service范例代码实现4. Client模块范例代码实现5. 总结...
2022-02-19 17:35:05
161
原创 18.Android Service的Proxy-Stub设计模式
0. 总览2. 通用接口:IBinder3. 实践Proxy-Stub模式4. 举例:以既有的SensorService为例0. 总览对于Android Service只需要扩充IBinder接口。AppService必须继承Service类。2. 通用接口:IBinder3. 实践Proxy-Stub模式4. 举例:以既有的SensorService为例...
2022-02-19 16:59:35
1330
原创 17.亲自开发SQRService的Proxy-Stub设计模式
0. 总览1. SQRService的Proxy-Stub架构2. 撰写Proxy类代码3. 撰写Stub类代码4. 撰写Core Service类代码0. 总览1. SQRService的Proxy-Stub架构2. 撰写Proxy类代码3. 撰写Stub类代码4. 撰写Core Service类代码...
2022-02-19 16:07:57
340
原创 16. Native核心服务的Proxy-Stub设计模式
https://www.bilibili.com/video/BV14K4y1s7gN?p=107&spm_id_from=pageDriver0. 总览1. 复习:Java层的Proxy-Stub设计模式2. 从IBinder接口说起3. 使用模板,产生Stub类4. 举例:以既有的Native Service为例5. 使用模板产生Proxy类6. 让client使用Proxy类的新接口0. 总览1. 复习:Java层的Proxy-Stub设计模式
2022-02-19 15:48:15
475
原创 15.撰写你的第一个核心服务
https://www.bilibili.com/video/BV14K4y1s7gN?p=102&spm_id_from=pageDriver0. 总览1. 为什么要写核心服务呢?2. 亲自开发一个Native Service: SQRService3. 撰写SQR.cpp来使用SQRService4. 撰写Java层Client来使用核心服务5. 撰写一个Java层Activity5.1 新潮的架构设计6. 方案二的实现7. 优化设计0. 总览1. 为什么要写核
2022-02-19 11:47:28
369
原创 14. 框架的设计思想
按照EIT造型来理解整个框架的构建。思考:考虑框架的通用性(满足EIT造型),通用性的接口是上层调用的考虑框架的特殊性(设计特殊的stub,提供新的接口)思考:定义接口(强龙)接口实现(地头蛇)谁来调用(强龙)...
2022-02-18 09:21:05
186
原创 13.认识Android的核心服务
0. 总览1. 区分核心服务与APP服务2. 回忆APP服务3. 区分两种核心服务:Android Service与Native Service4. 核心服务的特性5. 核心服务的特性6. 简介几个Android Service7. 天字第一号的核心服务:Service Manager8. 核心服务的共通API:IBinder接口9. BBinder基类实现IBinder接口...
2022-02-16 00:08:59
1231
原创 12.问题集:进程、线程和JNI架构
参考:https://www.bilibili.com/video/BV14K4y1s7gN?p=900. 总览1. 进程(Process)基础2. 线程(Thread)基础
2022-02-15 22:42:40
1049
原创 11.JNI:本地线程进入Java层(很好的理解call back的原理)
0. 总览1. 如何创建Native层的子线程?1.1 在C函数里创建子线程2. Native线程进入Java层3. Native多线程的安全0. 总览1. 如何创建Native层的子线程?1.1 在C函数里创建子线程2. Native线程进入Java层3. Native多线程的安全...
2022-02-15 00:11:26
238
原创 10.JNI:多个Java线程进入本地函数
0. 总览1. 认识JNI线程模式1.1 Android线程的特性1.2 线程往返Java与C++1.3 VM对象与JavaVM指针1.4 为什么需要JNIEnv对象呢?2. 从Session概念认识JNIEnv对象3. 细说JNIEnv对象4. 本地函数的线程安全(多个线程同步问题)0. 总览1. 认识JNI线程模式1.1 Android线程的特性1.2 线程往返Java与C++1.3 VM对象与JavaVM指针1.4 为什么需要JNIEn.
2022-02-14 23:41:25
778
原创 9.JNI_有必要的优化设计
0. overview1. 创建C++类的对象2. 优化目的:维护本地函数的稳定性3. 静态对静态、动态对动态原则4. Java与C++对象之间<单向>对称关连5. Java与C++对象之间<双向>对称关联6. 总结0. overview1. 创建C++类的对象2. 优化目的:维护本地函数的稳定性3. 静态对静态、动态对动态原则4. Java与C++对象之间<单向>对称关连.
2022-02-14 22:28:21
775
原创 8.JNI(从C调用Java函数)
0. 总览1. Why?将控制点下移到C/C++层1.1 古典视角的反思1.2 新潮视角1.3 软硬结合的机会1.4 软硬结合的范例2. 控制点与函数调用2.1 EIT造型的典型(反向调用:IoC)2.2 也能正向调用2.3 看看Android的范例2.4 C层拥有控制点的比喻2.5 android框架示例图2.6 C++拥有控制权的表现3. How(从C调用Java函数)3.1 控制点的基本特性3.2 从C调用Java函数3.3 示例说明3.4 详细代码讲.
2022-02-14 00:37:54
1218
原创 7.认识JNI和NDK
0. 总览1. JNI的基本概念2. 使用Android NDK3. 如何载入*.so档案4. VM是插件管理器的角色5. *.so的入口函数JNI_OnLoad()0. 总览1. JNI的基本概念2. 使用Android NDK上图中,可以将.so文件进行 APK打包,然后发布到应用市场,user可以进行使用。3. 如何载入*.so档案4. VM是插件管理器的角色两个观点.
2022-02-13 23:17:42
313
原创 6.JNI架构原理(Java与C的对接)
1. 总览1. 为什么Android应用需要Java和C对接呢?2. EIT造型的Java实现3. EIT造型的C语言实现3.1 C与Java两个观点幕后一致的本质3.2 Java对象与C函数有何关系?4. EIT造型的C和Java组合实现4.1 C语言实现4.2 Java实现5. EIT混合造型6. 重要议题(由谁来创建基类的对象)1. 总览1. 为什么Android应用需要Java和C对接呢?上述的框架图中,需要弄明白:Java调用.
2022-02-13 22:30:51
747
原创 5.Messager框架与IMessager接口
0. 总览1. Messager的基本概念和角色2. Android的Messenger框架2.1 Messenger详解2.2 程序代码2.3 步骤详解3. 双向沟通的Messenger框架3.1 单向传递信件3.2 双向传递信件3.2.1 双方如何通过IBinder接口通信?3.2.2 代码详解4. IMessenger接口0. 总览1. Messager的基本概念和角色2. Android的Messenger框架.
2022-02-13 21:40:31
472
原创 4.活用IBinder接口于短程通信
0. 总览1. 在同一进程里,活用IBinder接口2. 目的、议题与方法3. 留意线程角色0. 总览1. 在同一进程里,活用IBinder接口2. 目的、议题与方法3. 留意线程角色
2022-02-13 20:45:38
250
原创 3. AIDL与Proxy-Stub设计模式
IPC的Proxy-Stub设计模式1. 复习IBinder接口单层框架图:两层框架:对于App而言,只能看到上层的op接口,但是看不到fun()接口了。改变了t的实现接口:App还是需要直接访问interface接口,并没有完全的隔离开来。改进的版本:建立了中间的曹操类。2. IBinder接口的一般用途对于上述的代码中,开发者需要编写额外的代码,加重了开发者的负担。本单元没有用“proxy-stub” -> 下单元采用“pr
2022-02-13 20:06:05
688
原创 2.应用Android的UI框架
应用Android的UI框架(以设计游戏循环GameLoop为例)1. UI线程、View与onDraw()函数2. 基本游戏循环(GameLoop)3. 使用UI线程的MQ(Message Queue)4. 诞生一个小线程担任游戏线程5. 小线程(非UI线程)调用postInvalidate()6. 设计一个GameLoop类别7. 只诞生一次GameLoop对象...
2022-02-12 11:55:21
656
原创 1.Android中的线程详解
4. 细说主线程(UI)线程的角色5. 线程之间的通信架构主线程丢信息给自己子线程丢信息给主线程替子线程诞生Looper与MQ6. Android UI的单线程程序7. 线程安全的化解之例...
2022-02-12 11:08:29
399
原创 8.7 堆排序(选择排序、算法实现、性能分析)
1. 知识总览2. 什么是堆3. 如何基于堆进行排序?3.1 建立大根堆3.2 基于大根堆进行排序4. 算法效率分析5. 知识回顾1. 知识总览2. 什么是堆3. 如何基于堆进行排序?3.1 建立大根堆3.2 基于大根堆进行排序4. 算法效率分析5. 知识回顾...
2022-02-06 19:07:37
242
原创 8.6 简单选择排序(选择排序、算法实现、性能分析)
1. 知识总览2. 简单选择排序3. 算法实现4. 算法性能分析5. 知识回顾1. 知识总览2. 简单选择排序3. 算法实现4. 算法性能分析5. 知识回顾
2022-02-06 18:47:55
250
1
原创 8.5 快速排序(交换排序、算法实现、性能分析)
1. 知识总览2. 快速排序3. 算法实现4. 算法效率分析5. 知识回顾1. 知识总览2. 快速排序3. 算法实现4. 算法效率分析5. 知识回顾
2022-02-06 18:41:49
288
原创 8.4 冒泡排序(交换排序、算法实现、性能分析)
1. 知识总览2. 冒泡排序3. 算法实现4. 算法性能分析5. 知识回顾1. 知识总览2. 冒泡排序3. 算法实现4. 算法性能分析5. 知识回顾
2022-02-06 18:27:49
335
原创 8.3 希尔排序(算法实现、性能分析)
1. 希尔排序2. 第一趟排序3. 第二趟排序4. 第三趟排序5. 算法实现6. 算法性能分析7. 知识总结1. 希尔排序2. 第一趟排序3. 第二趟排序4. 第三趟排序5. 算法实现6. 算法性能分析7. 知识总结...
2022-02-06 18:21:54
310
原创 8.2 插入排序(算法实现、效率分析、折半优化)
1. 插入排序2. 算法实现3. 算法效率分析4. 优化(折半插入排序)5. 知识回顾1. 插入排序2. 算法实现3. 算法效率分析4. 优化(折半插入排序)5. 知识回顾
2022-02-06 18:06:15
1136
原创 8.1 排序的基本概念(时间复杂度、空间复杂度、稳定性、内部排序、外部排序、可视化网站)
1. 什么是排序?2. 排序算法的应用3. 排序算法的评价指标4. 排序算法的分类5. 知识回顾1. 什么是排序?2. 排序算法的应用3. 排序算法的评价指标4. 排序算法的分类5. 知识回顾学习链接...
2022-02-06 17:36:07
228
原创 7.5 散列查找(开放定址法、线性探测法、平方探测法、伪随机序列法、再散列法)
1. 前情回顾2. 处理冲突的方法(开放定址法)2.1 线性探测法2.2 平方探测法3. 再散列法4. 知识回顾与重要考点1. 前情回顾2. 处理冲突的方法(开放定址法)2.1 线性探测法2.2 平方探测法3. 再散列法4. 知识回顾与重要考点...
2022-02-06 17:11:55
2695
1
原创 7.4 散列查找(散列表、常见的散列函数、除留余数法、直接定址法、数字分析法、平方取中法)
1. 散列表2. 处理冲突的方法(拉链法)3. 散列查找4. 常见的散列函数1. 散列表2. 处理冲突的方法(拉链法)3. 散列查找4. 常见的散列函数
2022-02-06 16:17:18
438
原创 7.2 B树的定义、查找效率分析、B树的高度、插入和删除
1. B树1.1 回顾:二叉查找树(BST)1.2 5叉查找树1.3 如何查找1.4 如何保证查找效率1.5 B树1.6 B树的高度1.7 知识回顾2. B树的插入和删除2.1 B树的插入2.2 B树的删除2.3 知识回顾1. B树1.1 回顾:二叉查找树(BST)1.2 5叉查找树1.3 如何查找1.4 如何保证查找效率1.5 B树1.6 B树的高度1.7 知识回顾2. B树的插入和删除2.1 B树的插入...
2022-01-22 20:44:57
653
原创 7.1 查找的基本概念、顺序查找、折半查找、分块查找(索引顺序查找)
1. 查找的基本概念1.1 知识总览1.2 基本概念1.3 对查找表的常见操作1.4 查找算法的评价指标1.5 知识回顾2. 顺序查找2.1 知识总览2.2 顺序查找的算法思想2.3 顺序查找的实现2.4 查找效率分析2.5 顺序查找的优化2.6 用查找判定树分析ASL2.7 知识回顾3. 折半查找(二分查找)3.1 知识总览3.2 折半查找的实现3.3 查找效率分析3.4 折半查找判定树的构造3.5 知识回顾3.6 拓展思考4. 分块查找...
2022-01-22 16:05:29
1064
原创 6.7 有向无环图表达式、拓扑排序、逆拓扑排序、关键路径
1. 有向无环图(DAG)1.1 DAG描述表达式2. 拓扑排序2.1 AOV网(有向无环图)2.2 拓扑排序2.3 对有回路的图进行拓扑排序2.4 逆拓扑排序2.5 逆拓扑排序的实现(DFS算法)2.6 知识回顾3. 关键路径1. 有向无环图(DAG)1.1 DAG描述表达式2. 拓扑排序2.1 AOV网(有向无环图)2.2 拓扑排序2.3 对有回路的图进行拓扑排序2.4 逆拓扑排序2.5 逆拓扑排序的实现(DFS算法)...
2022-01-22 14:07:30
612
原创 6.6 最短路径问题(BFS遍历无权图的单源最短路径、Dijkstra最短路径算法、Floyd算法实例)
0. 最短路径问题1. BFS求无权图的单源最短路径1.1 BFS遍历代码实现1.2 BFS查找最短路径代码实现1.3 知识回顾2. Dijkstra最短路径算法2.1 BFS算法的局限性2.2 Dijkstra算法流程2.3 如何使用数组信息?2.4 Dijkstra算法的时间复杂度2.5 Dijkstra算法不适用于有负权值的带权图3. Floyd算法3.1 Floyd算法3.2 Floyd算法核心代码3.3 Floyd算法实例3.4 不能解决的问题3...
2022-01-21 18:11:57
1831
原创 6.5 最小生成树(最小代价树、Prim算法、Kruskal算法的实现思想)
1. 知识总览2. 生成树2.1 广度优先生成树2.2 深度优先生成树3. 最小生成树(最小代价树)3.1 Prim算法(普里姆)3.2 Kruskal算法3.3 Prim算法 vs Kruskal算法4. 最小生成树(最小代价树)算法的实现思想4.1 Prim算法的实现思想4.2 Kruskal算法的实现思想5. 知识回顾1. 知识总览2. 生成树2.1 广度优先生成树2.2 深度优先生成树3. 最小生成树(最小代价树)3.1...
2022-01-20 16:38:29
404
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人