层次化
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: start; widows: 3;">下层构件为 上层构件提供服务,上层构件使用下层构件的服务,上层和下层之间形成一种类似“调用- 返回”的关系。为了正确地调用和返回,每一层都需要提供一个界面(接口)给上层,以便 与之交互</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: start; widows: 3;">高层构件的功能依赖于低层构件的功能,但高层构件一般更容易理解,</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: start; widows: 3;">层次化体系结构的主要优点包括重用和标准化</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: start; widows: 3;">重用是指同样的构件可以用在任何具有 相同界面要求的地方;同样,只要层次间界面不变,一个构件也可以换用以不同方式实现的 其他同类构件</span>
例如自研播放器要放到IOS上,可以移除Android的上层,将内核基本上是原封不动的挪到IOS,IOS上层再做一下封装即可使用了
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: start; widows: 3;">标准化是指由标准 化组织为某一类软件构件定义标准界面,而各软件厂商可以采取不同的低层实现技术来实现 高层的标准界面。</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: start; widows: 3;">主要缺点是效率不如整体式结构,这是因为当程序员或用户面对顶层 构件请求某项服务时,这个请求需要从高层到低层逐层下传,最终由底层构件来实现功能, 再将结果逐层上传,直至顶层用户。</span>
举例:IOS的一层
传到了各个模块
各个模块都对这层的一些变量进行修改,导致问题定位,调试都比较麻烦
模块化
<div class="para" label-module="para" style="font-size: 14px; word-wrap: break-word; color: rgb(51, 51, 51); margin-bottom: 15px; text-indent: 2em; line-height: 24px; zoom: 1; font-family: arial, 宋体, sans-serif; text-align: start;">定义:模块化设计是指在对一定范围内的不同功能或相同功能不同性能、不同规格的产品进行功能分析的基础上,划分并设计出一系列功能模块,通过模块的选择和组合可以构成不同的产品,以满足市场的不同需求的设计方法。</div><div class="anchor-list" style="position: relative; color: rgb(51, 51, 51); font-family: arial, 宋体, sans-serif; font-size: 12px; text-align: start;"><a name="3" class="lemma-anchor para-title" style="color: rgb(19, 110, 194); position: absolute; top: -50px;"></a><a name="sub189730_3" class="lemma-anchor " style="color: rgb(19, 110, 194); position: absolute; top: -50px;"></a><a name="原则" class="lemma-anchor " style="color: rgb(19, 110, 194); position: absolute; top: -50px;"></a></div><div class="para-title level-2" label-module="para-title" style="clear: both; zoom: 1; overflow: hidden; border-left: 12px solid rgb(79, 156, 238); line-height: 24px; font-size: 22px; font-family: "Microsoft YaHei", SimHei, Verdana; margin: 35px 0px 15px -30px; background-image: url("http://baike.bdimg.com/static/wiki-lemma/normal/resource/img/paraTitle-line_c5e6d61.png"); background-position: initial; background-size: initial; background-repeat: initial; background-attachment: initial; background-origin: initial; background-clip: initial; position: relative; color: rgb(51, 51, 51); text-align: start;"></div>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: start; widows: 3;">模块(module)是指提供特定功 能的相对独立的单元</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">标准化:模块是具有标准尺寸和标准接口的预制功能单元,这是组装、互换等特征 的基础。</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">可组装:多个模块可以方便、灵活地组合、配置,以构造不同大小、不同形状、不 同功能的系统。</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">可替换:通过用一个模块去更换另一个模块,可以改变系统的局部功能而不影响系 统的其他部分。</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">可维护:可以对模块进行局部修改或设置,以满足用户的需求。另外可以在现有系 统中增加新模块,以扩展系统功能。</span>
是支持层次化的
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: start; widows: 3;">是一种软件设计技术,它将软件分解为若干独立 的、可替换的、具有预定功能的模块,每个模块实现一个功能,各模块通过接口(输入输出 部分)组合在一起,形成最终程序</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">易设计:较大的复杂问题分解为若干较小的简单问题,使我们可以从抽象的模块功 能角度而非具体的实现角度去理解软件系统,从而整个系统的结构非常清晰、容易 理解,设计人员在设计之初可以更加关注系统的顶层逻辑而非底层细节</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">易实现:模块化设计适合团队开发,因为每个团队成员不需要了解系统全貌,只需 关注所分配的小任务。另外团队可以灵活地增加人手,新人只需直接接手某个模块, 不会影响系统其他模块的开发。</span><br>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">易测试:每个模块不但可以独立开发,也可以独立测试,最后组装时再进行联合测 试。</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">易维护:如果需要修改系统或者扩展系统功能,只需针对特定模块进行修改或者添 加新模块。</span>
<span style="color: rgb(51, 51, 51); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 16px; letter-spacing: 0.2px; orphans: 3; text-align: left; widows: 3;">可重用:很多模块的代码都可以不加修改地用于其他程序的开发。</span>
备份化
<p style="language:zh-CN;line-height:150%;margin-top:0pt;margin-bottom:0pt;<br>text-align:left;direction:ltr;unicode-bidi:embed;vertical-align:baseline;<br>mso-line-break-override:restrictions;punctuation-wrap:simple">原因</p>
Android的版本分化
各个播放器的优缺点
自研播放器
设置buffer大小
音视频解码
定制化的需求
缺点
硬解依赖ROM,而不少ROM厂商实现有问题。比如crash,ANR,花屏
软解,全走CPU进行解码,占用cpu高,手机发热,耗电多,一般手机无法对1080P或者4k进行解码
系统播放器
so加载失败
ROM厂商对系统播放器支持都不错
缺点
无法完成产品的一些定制化需求
ROM厂商实现有差异
错误码不全,未知错误多
像电视上,ROM很少更新,有bug更新周期特别长,旧版本也无人维护
分片MP4无法使用