Android、iOS系统架构

1.1Android的系统结构

这个就是我们的Android的整体系统架构图,首先从整体上来看看Android的体系结构。

  • Linux Kernel:Android就是一个操作系统,其底层基于Linux Kernel,这一层主要完成的是操作系统所具有的功能,比如这一层有许多的驱动程序,正是通过这些驱动程序来驱动设备上的硬件设备的。(kernel:内核)
  • Android Runtime:Android的运行环境,Java程序运行需要Java核心包支持,然后通过JVM虚拟机来运行,Android Runtime里的Core Libraries就相当于Java的JDK,是运行Android应用程序所需要的核心库,Dalvik Virtual Machine相当于JVM,这是Google专门为Android开发的虚拟机。
  • Liberaries:这里都是Android的库文件,例如我们访问的SQLite数据库的库文件等等。
  • Application Framework:应用程序框架,这一层是我们重点学习的对象,通过各种各样的框架来实现Application。
  • Application:这就是我们开发的Application了。

1.2 iOS体系结构

IOS的系统架构与Android的非常相似

  • Core OS:核心系统层提供为上层结构提供最基础的服务如操作系统内核服务、本地认证、安全、加速等。
    • 操作系统内核服务(BSD sockets、I/O访问、内存申请、文件系统、数学计算等)
    • 本地认证(指纹识别验证等)
    • 安全(提供管理证书、公钥、密钥等的接口)
    • 加速 (执行数学、大数字以及DSP运算,这些接口iOS设备硬件相匹配)
  • Core Services:核心服务层为程序提供基础的系统服务例如网络访问、浏览器引擎、定位、文件访问、数据库访问等,主要包含以下框架:
    • CFNetwork(网络访问)
    • Core Data(数据存储)
    • Core Location(定位功能)
    • Core Motion(重力加速度,陀螺仪)
    • Foundation(基础功能如NSString)
    • Webkit(浏览器引擎)
    • JavaScript(JavaScript引擎)
  • Media:媒体层主要提供图像引擎、音频引擎、视频引擎框架。
    • 图像引擎(Core Graphics、Core Image、Core Animation、OpenGL ES)
    • 音频引擎 (Core Audio、 AV Foundation、OpenAL)
    • 视频引擎(AV Foundation、Core Media)
  • Cocoa Touch:可触摸层主要提供用户交互相关的服务如界面控件、事件管理、通知中心、地图,包含以下框架:
    • UIKit(界面相关)
    • EventKit(日历事件提醒等)
    • Notification Center(通知中心)
    • MapKit(地图显示)
    • Address Book(联系人)
    • iAd(广告)
    • Message UI(邮件与SMS显示)
    • PushKit(iOS8新push机制)

2.1 Android的四种常用组件

我们现在推崇的软件开发就是基于组件来开发的,组件就类似于电脑的硬件一样,我如果要组装一台电脑,可以直接通过购买各个硬件然后将其组装在一起,对于软件来说,组件就类似于这个,我们开发一个软件,可以直接将这些组件组合在一起就行了。

Android一共有四种常用的组件:Activity、Service、ContentProvider、BroadcastReceiver

  • Activity:Activity就是我们应用程序的界面,主要用来跟我们的用户进行交互的,比如一个文本框,按钮这些就是显示在activity上的,并且可以几首数据,传递数据到后台,然后显示出来。
  • Service:Service我们是看不见的,对于绝大部分的数据处理,业务的处理都是通过Service来完成。
  • ContentProvider:ContentProvider类似于我们的档案馆,里面存放了我们的各种数据,例如通讯录中的信息等,这个组件就是运行程序对其进行访问,然后得到里面的数据。(Provider供应商)
  • BroadcasetReceiver:BroadcastReceiver组件就是广播接收器,主要用来监听系统的各个行为的,例如当电量不足的时候会给我们发送一条广播信息。(Receiver接收器)

2.2 IOS

而IOS则采用委托和协议模式来实现应用程序的一些特定行为。
在IOS中, 由Cocoa Touch提供的框架之一UIKit来提供和管理应用程序的行为,包括应用程序的启动直到退出,UIKit 框架管理着应用程序的许多核心行为。
UIKit 框架包括一个UIApplication 对象,UIApplication 对象是应用程序的心脏,它从系统接收事件,然后将事件分派到应用程序实现的自定代码进行处理。
具体的应用程序只需实例化UIApplication 对象对象即可,无需进行子类化,应用程序的特定行为采用委托和协议模式由一个应用程序委托对象来实现。
应用程序在调用UIApplication 对象的UIApplicationMain函数来启动应用时,通过实例化一个应用程序委托对象并作为参数传给UIApplicationMain函数。
应用程序委托作为 UIResponder 的子类,也实现了UIApplicationDelegate协议,用来处理 UIApplication 对象委派的应用程序相关事件(主要是各种应用程序状态改变事件),来实现应用程序的定制化。
协议模式是osx 操作系统框架采用的特有的设计模式之一。协议是可编程接口的声明,任何类都可以实施它的方法。与协议相关联的类实例,调用协议的方法,并获取由该类正式采用和实现该协议所返回的值。对象之间的此类通信,产生了一个特定目标,例如解析 XML 代码或拷贝对象。协议接口两边的对象可以通过继承,实施远距离彼此相关。协议因此和委托一样,可作为子类化的替换手段。Apple 提供的框架,声明了数十个协议。


3.1 Activity的启动流程

我们大致了解了Android的体系结构后,就可以开始进行我们
的代码操作了,首先来看Activity的一个启动流程:

当运行我们的Android应用程序时,Android操作系统首先会去找我们的AndroidManifest.xml这个文件,这个文件是我们应用程序的主配置文件,因为我们一个应用可能有多个Activity,那么首先展示那个Activity呢?这个主配置文件就定义了当前这个应用的默认所加载的Activity对象,找到Activity对象后,就会调用其onCreate()方法,这个方法主要就是用来加载我们的布局文件,通过setContentView()方法可以来加载我们指定的布局文件,最后根据布局文件中的各个控件显示在我们的屏幕上。这个就是我们的Activity的启动流程。

玩法 Android IOS
入口配置 AndroidManifest.xml info.plist
iOS的入口在main.m文件:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

main函数的两个参数,iOS中没有用到,包括这两个参数是为了与标准ANSI C保持一致。
UIApplicationMain函数,前两个和main函数一样,重点是后两个,官方说明是这样的:
// If nil is specified for principalClassName, the value for NSPrincipalClass from the Info.plist is used. If there is no
// NSPrincipalClass key specified, the UIApplication class is used. The delegate class will be instantiated using init.
UIKIT_EXTERN int UIApplicationMain(int argc, char *argv[], NSString *principalClassName, NSString *delegateClassName);

后两个参数分别表示程序的主要类(principal class)和代理类(delegate class)。如果主要类(principal class)为nil,将从Info.plist中获取,如果Info.plist中不存在对应的key,则默认为UIApplication;如果代理类(delegate class)将在新建工程时创建。

参考:
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,293评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,604评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,958评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,729评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,719评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,630评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,000评论 3 397
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,665评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,909评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,646评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,726评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,400评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,986评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,959评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,197评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,996评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,481评论 2 342