上篇,咱们聊完了APP的“生老病死”,接下来咱们来聊聊在各自的体系中,App是如何发动的。
从电脑的windos 95的操作体系开端,咱们发动电脑或许手机今后,咱们看到的第一个界面就是体系的桌面(iOS叫 springboard,AndroidLauncher)如下图所示:

App的发动流程详解

一、APP的发动流程介绍

1、Android发动流程介绍

用户经过点击桌面Launcher上的图标就能够触发app的发动了。 Android的App的发动流程其实能够全体分为两部分,一部分是点击Launcher上的app图标,Launcher经过AMS向Zygote恳求孵化使用进程,随后ActivityThread的main办法就发动了。第二部分是ActivityThread(App的进程)发动之后,App进程经过AMS创立Application和Activity,最终履行Activity的生命周期。
简要归纳的话就是两个流程:
1)Launcher -> AMS -> Zygote -> ActivityThead
2)ActivityThread -> AMS -> (Application/Activity

上面的两个流程能够大体总结为几个阶段:
1)桌面Launcher进程恳求AMS。
2) AMS恳求Zygote创立使用进程。
3) Zygote孵化进程后履行ActivityThread的main办法。
4)ActivityThread恳求AMS。
5)AMS发送创立Application恳求。
6)AMS发送创立Activity恳求。

整个流程看起来比较杂乱,实际流程比这个还要更杂乱,可是对咱们重视使用开发者来说只需要重视最终两个流程就能够了。
简略归纳为,用户点击APP图标后,App开端发动,然后会调用咱们创立的Applicationd对象初始化APP,然后会创立第一个主Activity显现咱们的程序界面

2、iOS的发动流程介绍

相同,在iOS上,用户经过点击桌面SpringBoard上的图标就能够触发app的发动了。 Android的App的发动流程其实能够全体分为两个阶段,pre-main阶段和main()阶段。程序发动到main函数履行前是pre-main阶段;在履行main函数后,调用AppDelegate中的-application:didFinishLaunchingWithOptions:办法完结初始化,并展示主页,这是main()阶段,或许叫做main()之后阶段。

(1)pre-main阶段:
  • **加载使用的可履行文件 **。 (经过调用exec函数)
  • 加载动态链接库加载器dyld(dynamic loader)。
  • dyld递归加载使用一切依赖的dylib(dynamic library 动态链接库)。
  • 进行**rebase指针调整和bind**符号绑定。
  • ObjCruntime初始化(ObjC setup):ObjC相关Class的注册、category注册、selector唯一性查看等。
  • 初始化(Initializers) :履行+load()办法、用attribute((constructor))润饰的函数的调用、创立C++静态全局变量等。
(2)main()阶段:
  1. dyld调用main()
  2. 调用UIApplicationMain()
  3. 调用applicationWillFinishLaunching
  4. 调用didFinishLaunchingWithOptions

相同,咱们也不用重视上面的杂乱发动流程,只需要知道main()阶段的几个办法即可,下面咱们将经过两个程序来协助咱们加深了解Android和iOS的App发动流程

二、Android中APP发动Demo

1、下载Android Studio

下载地址:developer.android.google.cn/studio?hl=z…

App的发动流程详解

2、装置Android Studio

一路点击Next,是用默认装备即可,最终点击Finish装置成功

App的发动流程详解

3、创立Demo程序

  1. 点击画线button创立App

App的发动流程详解

  1. 创立Empty Activity,点击 Next

App的发动流程详解

  1. 使用截图装备,点击Finish创立App

App的发动流程详解

  1. 点击画线区域切换为Project形式
    App的发动流程详解
  2. 鼠标右键点击画线出,挑选 New -> Kotlin Class/File,输入类名‘CostomApplication’
    App的发动流程详解
  3. 在文件中,写入如下代码
override fun onCreate() {
super.onCreate()  
Log.e("lanching", "Application = onCreate:++ ", )  
}
  1. 在‘AndroidManifest.xml’,增加画线装备

App的发动流程详解

  1. 在MainActivity中,增加日志输出的代码

App的发动流程详解

  1. 假如没有模拟器,能够点击第一个红线,然后点击第二个红线创立设备

App的发动流程详解

  1. 点击运行,能够看到APP确实先创立了Application,然后创立在MainActivity

App的发动流程详解

总结:经过上面的Android发动Demo,咱们从代码成面上验证了APP发动会先创立Application,然后创立在MainActivity,咱们能够依据详细的需求,在每个流程增加详细的功用代码。上面咱们将的其他流程,是操作体系行为,咱们只需要了解即可。

三、iOS中APP发动Demo

1、装置xcode

App的发动流程详解

2、创立Demo程序

  1. 点击 Create New Proect,创立项目

App的发动流程详解

  1. 挑选创立iOS的App

App的发动流程详解

  1. 输入项目名称,点击Next,然后挑选项目目录,点击Create

App的发动流程详解

  1. 在创立的项目中,main文件里边增加日志代码

App的发动流程详解

  1. 在AppDelegate文件里边增加日志代码

App的发动流程详解

  1. 在ViewController文件里边增加日志代码

App的发动流程详解

7.点击画线区域挑选模拟器,点击运行,就能够看到流程日志打印

App的发动流程详解

总结:经过上面的iOS发动Demo,咱们从代码成面上验证了iOS的APP发动会先履行main函数创立UIApplication实列,然后履行Appdelegate的didFinishLaunchingWithOptions办法,最终加载主页的ViewController

四、全体总结

经过上面的介绍,我想咱们对Android和iOS中App的发动流程有了必定的了解,在App开发过程中,上面的流程现已能过掩盖咱们绝大多数的需求,可是假如感兴趣想深化了解App的发动流程,能够查阅相关常识继续深化