安卓基础工具分析与实践

Dreaming-in-Gottingen 2019-12-17 原文

安卓基础工具分析与实践

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

 

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.个人期望

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

。。。。。。

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

发表于
2019-12-17 00:51 
OnlyTime_唯有时光 
阅读(
评论(

编辑

收藏

 

版权声明:本文为Dreaming-in-Gottingen原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/Dreaming-in-Gottingen/p/12052291.html

安卓基础工具分析与实践的更多相关文章

随机推荐

  1. Longhorn,企业级云原生容器分布式存储 – 定制默认设置

    内容来源于官方 Longhorn 1.1.2 英文技术手册。 系列 Longhorn 是什么? Longhor […]...

  2. 如何设置记事本( .txt文件)的默认编码为UTF-8?

    1.在桌面新建一个文本文档,不要写入任何内容,然后手动另存为,将此文档编码改为UTF-8,然后将文件名字改为t […]...

  3. 使用Visual Studio Installer 2015打包WPF程序

    前言 做过WPF项目,就少不了要将程序打包部署到客户现场,因为一般长时间不会更新打包程序,每次变动较大需要重新 […]...

  4. linux查看RAID信息

    linux查看RAID信息 linux查看RAID信息 发表于2013 年 12 月 22 日 RAID分为软 […]...

  5. java之初见

    java之初见 1.Java语言的了解: Java语言最早是由SUN公司创造出来的,1991年,SUN公司的g […]...

  6. hdu-5692 Snacks(dfs序+线段树)

    题目链接: Snacks Problem Description   百度科技园内有n个零食机,零食机之间通过 […]...

  7. ansible实现SSH配置免密互信

    Ansible是用来处理大批量重复性操作的工具,只需要在一台机器上就可以远程控制所有机器,但前提是必须保证每台 […]...

  8. mysql性能测试报告

    1. 测试目的 对mysql数据库进行基准测试,各性能指标进行定量的、可复现的、可对比的测试。 基准测试可以理 […]...

展开目录

目录导航