m移动端基础知识浅谈

Android、iOS系统架构

2017-11-28  本文已影响0人  JTR354

1.1Android的系统结构

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

1.2 iOS体系结构

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


2.1 Android的四种常用组件

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

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

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)将在新建工程时创建。

参考:
上一篇下一篇

猜你喜欢

热点阅读