安卓基础工具分析与实践
接下来一段时间,我决定把安卓的常用基础工具做一个总结。以便给读者一些启示,算是抛砖引玉,或者是对自己研究心得的记录吧。(格式写的乱,读者自行脑补分段吧。。。)
1. 一个问题:安卓native层开发为什么可以用较少行代码实现一些复杂的业务逻辑操作?
对于这个问题,有些人可能觉得并不是,像Android中的AudioFlinger模块,太冗长、啰嗦,类之间的关系巨复杂了!还有OMXCodec编解码相关的内容也是绕的云里来雾里去!
2. 待介绍的内容
今天,我对于Audio的native框架、音视频编解码这些较上层的框架相关内容,暂且不做介绍,而是要介绍再下一层的东西。这一层,是在bionic之上,具体业务(像音视频编解码框架,audio框架)之下的一层,为公共基础库,可以被各个模块使用。
实现路径为system/core/libcutils/,头文件路径为system/core/include/utils/,编译出的库为libutils.so。
可以看到安卓多媒体中间件的源文件基本上都包含了这些头文件:#include <utils/xxx.h>,并且makefile都链接了这个库libutils.so。
3. 问题答案
上面问题的答案,就是“封装”!
4.为什么
上层的业务开发工作基于这些被严格测试和验证了的基础工具来展开,可以快速高效实现具体业务逻辑,把我们的精力和焦点放在具体业务逻辑上,而不是二者同时考虑。
一个通俗易懂的比喻,我们目标是造一辆山地车,主要精力是拿各个厂商的零件去组织装配就可以了,例如拿Shimano的变速器,拿米其林的轮胎等等。相反,另外一种做法不可取:山地车商又组织一批人力去攻克变速器和轮胎技术。
再有一个例子是,光刻机巨头ASML也不是每样东西都研究,像光学镜头这种东西也不得不从Carl Zeiss采购,NASA的哈珀望远镜的镜头也是让Carl Zeiss帮定制的。这个没办法,光学镜头人家研究了一两百年,自己短时间突击肯定达不到别人的高度。
这也体现了国际分工和全球化作用,那就是做自己最擅长的事情——业务聚焦。
5.具体介绍细节
回到这个问题点,可以这么说,只有把基础工具的实现原理了解清楚,上层业务开发才更快速和高效,而不用再从造轮子开始做起。读android中一些模块的实现,我们也不会因调用逻辑不清楚而晕头转向了。
接下来呢,我将利用几篇文章来介绍相关工具,并利用demo来验证这些工具。这些工具介绍都是基于Android4.4版本,demo都会上传至我的github仓库。
这些工具内容涉及线程类、原子操作、互斥锁、RefBase、容器类、堆栈调用、sharebuffer、hash类等等。以及应用于多媒体部分的更上一层的封装,像ALooper/AMessage/AHandler消息机制模型。
6.个人期望
我的目标让读者明白两点:如何实现 + 如何用。
。。。。。。
今天太晚了,就先写到这儿。
- HTTP协议基础及分析工具使用
- android内存分析工具- 内存基础知识(2)
- 软件测试技术大全——测试基础 流行工具 项目实践
- 最新《数据分析工具之spss/amos精品课程零基础到精通》
- 安卓开发中内存问题分析(一)工具篇
- 数值分析基础工具使用Matlab绘制双曲线
- 安卓动态分析工具 Inspeckage
- 思达报表工具Style Report基础教程—制作ABC分析数据图表
- 安全编码实践三:C/C++静态代码分析工具Prefast
- Android开发:Translucent System Bar 的最佳实践------Android性能分析工具整理汇总
- node.js基础模块http、网页分析工具cherrio实现爬虫
- nodejs基础之常用工具模块util用法分析
- 安卓内存分析工具Mat的基本用法
- 苹果和安卓数据分析 移动应用统计工具哪个好用?
- 安卓开发基础知识2(荣耀6Plus后置摄像头技术难度分析)
- R语言︱情感分析—词典型代码实践(最基础)(一)
- node.js基础模块http、网页分析工具cherrio实现爬虫
- [网络安全自学篇] 六.OllyDbg动态分析工具基础用法及Crakeme逆向破解
- TCP/IP 实践之Ubuntu 16.04下安装网络流量分析工具 Wireshark
- 【实践】源代码分析工具Doxygen+Graphviz