安卓和苹果APP启动步骤

本文对比解析了安卓和iOS应用启动过程,从Launcher到AMS,再到Zygote和dyld,揭示了关键步骤:安卓的AMS创建新进程、ActivityThread初始化,与iOS的dyld调度和动态库加载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安卓app启动步骤:

(1)启动的起点发生在Launcher活动中,启动一个app说简单点就是启动一个Activity,那么我们说过所有组件的启动,切换,调度都由AMS来负责的,所以第一步就是Launcher响应了用户的点击事件,然后通知AMS;

(2)AMS得到Launcher的通知,就需要响应这个通知,主要就是新建一个Task去准备启动Activity,并且告诉Launcher你可以休息了(Paused);

(3)Launcher得到AMS让自己“休息”的消息,那么就直接挂起,并告诉AMS我已经Paused了;

(4)AMS知道了Launcher已经挂起之后,就可以放心的为新的Activity准备启动工作了,首先,APP肯定需要一个新的进程去进行运行,所以需要创建一个新进程,这个过程是需要Zygote参与的,AMS通过Socket去和Zygote协商,如果需要创建进程,那么就会fork自身,创建一个线程,新的进程会导入ActivityThread类,这就是每一个应用程序都有一个ActivityThread与之对应的原因;

(5)进程创建好了,通过调用上述的ActivityThread的main方法,这是应用程序的入口,在这里开启消息循环队列,这也是主线程默认绑定Looper的原因;

(6)这时候,App还没有启动完,要永远记住,四大组建的启动都需要AMS去启动,将上述的应用进程信息注册到AMS中,AMS再在堆栈顶部取得要启动的Activity,通过一系列链式调用去完成App启动;

IOS app启动步骤:

iPhone 上启动app都是由dyld调度的
起点:__dyld_start:
中间_main经过

  • 1、 设置app运行的上下文
  • 2、映射共享缓存mapShareCache
  • 3、实例化主程序instantiateFromLoadedImage
  • 4、加载插入动态库loadInsertedDylib
  • 5、链接主程序
  • 6、链接插入动态库
  • 7、弱绑定引用主程序
  • 8、初始化主程序initializeMainExecutable
  • 9、通知monitoringDyld,将要进入主 main入口
  • 10、进入app运行的main函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值