高焕堂视频学习笔记:介绍android的java层应用框架

说明:
2015年的时候看了一段时间的高焕堂从android程序员到架构师视频,总共接近234集的内容,15年大概看了60集左右,后来因为其他的事情,这个事就暂停了,最近找出笔记,发现需要整理下,不然都腐烂在电脑硬盘里了,所以特意整理之后发出来。希望对小伙伴们学习会有帮助。大致浏览了一下视频目录,感觉165-234集还是不错的,有时间会再学习。

介绍android的Java层应用框架

框架的背后就是EIT的造形

\

传统无框架

传统上,在没有框架的环境里,应用程序(application,或简称app)会调用平台(如linuxWindows等)平台的函数,如下图所示:

\

看起来合理,但是事实上是不合理
原因:有一天window想把f1()改成f2(),所有的app都要把f1改成f2成本太高。

由于控制权掌握在app开发者手里,所以在软件架构上,平台开发者反而受制于app开发者,这常常严重伤害平台软件变动的自由度,进而导致整个架构体系失去弹性,也失去活力而凋零。

因而,最近十年来,软件产业逐渐放弃上述的古典架构,改为基于框架(framework)的新型架构,甚至最时髦的两层框架,或是三层框架。例如,微软的.net,android平台都是时髦的多层框架。

你可以想一想兼容性到底是怎么做的,原理是什么?

单层框架

\

app只不过是很多个T的组合而已

在框架型式的平台架构里,是由框架的基类来调用app里的子类,于是框架拥有软件执行上的控制权,由框架来指挥app的运行。

软件的开发,强龙掌握了I的制定权

在软件的开发和软件的运行阶段,强龙都掌握了控制权

\

复合型框架

框架中有小框架

\

\

比如游戏有专门的cosd2d框架,这就是小框架,我们的项目也是有底层框架的就是一个小框架
大小框架都有基类和接口,可以很大的减少手机app的开发

双层框架

虽然java语言具有简单容易之美,但是其执行效率比c++低。为了追求力与美的组合,在目前的产业中,许多平台都是双层或多层框架;例如,建立出java和c++并存的双层框架。如下图:
java写的框架在上层,c++写的框架在下层

\

\

\

框架的控制机制

顾名思义,IOC就是反向控制的意思,ioc观念和机制源自于OOP语言的基类子类结构。
例如java语言中,基类的函数可以主动呼叫子类的函数,这就是一般所谓的IOC机制。后来,人们常将这些基类聚集起来,就称之为框架。
写在先的调用写在后的叫做反向控制,其实就是回调
基类写在先,子类写在后

IOC又称为反向呼叫,或反向调用。而反向调用的相反词就是:正向调用。正向调用就是app子类调用基类的函数。
例如,下图里的FirstActivity调用Activity基类的setContentView函数。

\

\

正向调用就意味着正向控制,也就是说,ap子类控制了框架基类,这是违背框架设计原则的。
反向调用就意味着反向控制,也就是说,框架基类控制了AP子类,这是符合框架设计原则的,也符合Hollywood(大明星)的原则。

\

\

\

无论是.net、ios或android框架的设计,都依循这项基本原则,让框架掌握控制权,也让掌握框架者能成为强龙。

认识android框架的实践技术

嫡系:android框架非常重要的柱子
这些类的new都是由框架来new的,app开发者不能new

\

\

\

\

2009年写的基类,2013年写的子类

那么框架事先又如何知道开发者后来撰写的应用子类的名称呢?如果不知道应用子类的名称,又如何创建应用子类的对象呢?
答案是:依赖androidmanifest.xml文档

\

\

\

\

Intent-based programming技术

因为这些activity不是app new出来的,那我们怎么互相之间调用呢?

android的4种嫡系应用子类之间如何互相沟通呢?其实很简单,就像你打手机去车行叫出租车,而不是直接到街道上叫车。你发给车行一个短信或一通电话,表明你的意图(Intent),当车行服务员接到此意图,就根据你的意图的内含条件而去挑选最合适的车,然后派遣它去接你。

送一封信给框架,然后框架就会根据你的条件来挑选你需要的车

于是,android框架里所提供的Intent就扮演它们之间的沟通媒介。这4种嫡系对象都是由框架去配对及启动的,并不是组件之间透过直接呼叫而启动的。意图(Intent)本身是定义一个类,一个Intent对象表达一个期望,叙述其所期望的服务或动作。

框架则根据此Intent对象之叙述,负责配对,找出相配的组件,然后将Intent对象传递给所找到的对象,于是框架的媒婆任务就完成了。

因此,Intent对象扮演着媒体中介的角色。例如,提供Activity组件——>android框架——>contentprovider组件之间相互沟通的相关信息。

这种Intent沟通方式让不同人开发的套件(package)内之类别可以轻易达成沟通。例如,有两个套件:A和B。假设它们是由不同的开发者所撰写的,当这两个套件都被下载到同一支手里执行时,就能立即互相沟通了,这是android框架的一项重要实践技术。

例如下图:

\

\

创建一封信,然后加了一些内容,然后把这封信给框架,框架

\

四大组件之相互启动关系

在android框架里已经定义了这些组件间的互动关系。互动关系又分为2:

1.启动关系
2.数据传输或交换关系

于此,从启动关系来初步认识它们。由于CP(content provider)组件大多基于被动角色、属于被启动的一方,其角色单纯不复杂。因之,先针对Activity<——>Receiver<——>Service间之三角关系,做个仔细的说明。

AA模式

这是由android先启动一个activity的子类之对象,然后ac01对象视需要而要求android启动另一个Activity的子类(如myActivity)的对象。

\

\

\

为什么慈禧太后不去先启动格格呢,而是先启动ac01,因为在androidmanifest.xml文件中已经确定了哪个是第一个需要启动的

RA模式

在此模式中,是有R(BroadCastReceiver)启动A(Activity)。但是谁来启动R呢?在本范例中,将有开机的事件来启动R。

\

开机:new receivier

\

\

RS模式

在此模式下,是由R(BroadcastReceiver)启动S(Service)。

\

\

\

RSA模式

在下面图中你就可以看到框架的角色,慈禧太后每次都要看androidmefist文件

\

\

AR模式(由A启动R)

每个reveiver都有它的条件

其他模式演练

\

认识ContentProvider

要配对就要在androidmanifest中配置contentfprovider的条件

\

\

\

\

赞 (0) 评论 分享 ()