上篇,咱们聊完了APP的“生老病死”,接下来咱们来聊聊在各自的体系中,App是如何发动的。
从电脑的windos 95的操作体系开端,咱们发动电脑或许手机今后,咱们看到的第一个界面就是体系的桌面(iOS叫 springboard,Android叫Launcher)如下图所示:
一、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
**符号绑定。 -
ObjC
的runtime
初始化(ObjC setup):ObjC
相关Class
的注册、category
注册、selector
唯一性查看等。 -
初始化(Initializers) :履行
+load()
办法、用attribute((constructor))
润饰的函数的调用、创立C++
静态全局变量等。
(2)main()阶段:
- dyld调用main()
- 调用UIApplicationMain()
- 调用applicationWillFinishLaunching
- 调用didFinishLaunchingWithOptions
相同,咱们也不用重视上面的杂乱发动流程,只需要知道main()阶段的几个办法即可,下面咱们将经过两个程序来协助咱们加深了解Android和iOS的App发动流程
二、Android中APP发动Demo
1、下载Android Studio
下载地址:developer.android.google.cn/studio?hl=z…
2、装置Android Studio
一路点击Next,是用默认装备即可,最终点击Finish装置成功
3、创立Demo程序
- 点击画线button创立App
- 创立Empty Activity,点击 Next
- 使用截图装备,点击Finish创立App
- 点击画线区域切换为Project形式
- 鼠标右键点击画线出,挑选 New -> Kotlin Class/File,输入类名‘CostomApplication’
- 在文件中,写入如下代码
override fun onCreate() {
super.onCreate()
Log.e("lanching", "Application = onCreate:++ ", )
}
- 在‘AndroidManifest.xml’,增加画线装备
- 在MainActivity中,增加日志输出的代码
- 假如没有模拟器,能够点击第一个红线,然后点击第二个红线创立设备
- 点击运行,能够看到APP确实先创立了Application,然后创立在MainActivity
总结:经过上面的Android发动Demo,咱们从代码成面上验证了APP发动会先创立Application,然后创立在MainActivity,咱们能够依据详细的需求,在每个流程增加详细的功用代码。上面咱们将的其他流程,是操作体系行为,咱们只需要了解即可。
三、iOS中APP发动Demo
1、装置xcode
2、创立Demo程序
- 点击 Create New Proect,创立项目
- 挑选创立iOS的App
- 输入项目名称,点击Next,然后挑选项目目录,点击Create
- 在创立的项目中,main文件里边增加日志代码
- 在AppDelegate文件里边增加日志代码
- 在ViewController文件里边增加日志代码
7.点击画线区域挑选模拟器,点击运行,就能够看到流程日志打印
总结:经过上面的iOS发动Demo,咱们从代码成面上验证了iOS的APP发动会先履行main函数创立UIApplication实列,然后履行Appdelegate的didFinishLaunchingWithOptions办法,最终加载主页的ViewController
四、全体总结
经过上面的介绍,我想咱们对Android和iOS中App的发动流程有了必定的了解,在App开发过程中,上面的流程现已能过掩盖咱们绝大多数的需求,可是假如感兴趣想深化了解App的发动流程,能够查阅相关常识继续深化