安卓基础工具分析与实践

接下来一段时间,我决定把安卓的经常使用基础工具作一个总结。以便给读者一些启示,算是抛砖引玉,或者是对本身研究心得的记录吧。(格式写的乱,读者自行脑补分段吧。。。)android

 

1. 一个问题:安卓native层开发为何能够用较少行代码实现一些复杂的业务逻辑操做?git

对于这个问题,有些人可能以为并非,像Android中的AudioFlinger模块,太冗长、啰嗦,类之间的关系巨复杂了!还有OMXCodec编解码相关的内容也是绕的云里来雾里去!github

2. 待介绍的内容框架

今天,我对于Audio的native框架、音视频编解码这些较上层的框架相关内容,暂且不作介绍,而是要介绍再下一层的东西。这一层,是在bionic之上,具体业务(像音视频编解码框架,audio框架)之下的一层,为公共基础库,能够被各个模块使用。ionic

实现路径为system/core/libcutils/,头文件路径为system/core/include/utils/,编译出的库为libutils.so。工具

能够看到安卓多媒体中间件的源文件基本上都包含了这些头文件:#include <utils/xxx.h>,而且makefile都连接了这个库libutils.so。oop

3. 问题答案测试

上面问题的答案,就是“封装”!spa

4.为何线程

上层的业务开发工做基于这些被严格测试和验证了的基础工具来展开,能够快速高效实现具体业务逻辑,把咱们的精力和焦点放在具体业务逻辑上,而不是两者同时考虑。

一个通俗易懂的比喻,咱们目标是造一辆山地车,主要精力是拿各个厂商的零件去组织装配就能够了,例如拿Shimano的变速器,拿米其林的轮胎等等。相反,另一种作法不可取:山地车商又组织一批人力去攻克变速器和轮胎技术。

再有一个例子是,光刻机巨头ASML也不是每样东西都研究,像光学镜头这种东西也不得不从Carl Zeiss采购,NASA的哈珀望远镜的镜头也是让Carl Zeiss帮定制的。这个没办法,光学镜头人家研究了一两百年,本身短期突击确定达不到别人的高度。

这也体现了国际分工和全球化做用,那就是作本身最擅长的事情——业务聚焦。

5.具体介绍细节

回到这个问题点,能够这么说,只有把基础工具的实现原理了解清楚,上层业务开发才更快速和高效,而不用再从造轮子开始作起。读android中一些模块的实现,咱们也不会因调用逻辑不清楚而晕头转向了。

接下来呢,我将利用几篇文章来介绍相关工具,并利用demo来验证这些工具。这些工具介绍都是基于Android4.4版本,demo都会上传至个人github仓库。

这些工具内容涉及线程类、原子操做、互斥锁、RefBase、容器类、堆栈调用、sharebuffer、hash类等等。以及应用于多媒体部分的更上一层的封装,像ALooper/AMessage/AHandler消息机制模型。

6.我的指望

个人目标让读者明白两点:如何实现 + 如何用。

。。。。。。

今天太晚了,就先写到这儿。

相关文章
相关标签/搜索