Android Activity启动流程(三)–Activity启动的详细流程

本文详述了Android Activity启动的前半部分流程,包括Activity如何调用ActivityManagerService启动应用,ActivityManagerService如何通过Zygote孵化应用进程,以及Zygote孵化应用的详细步骤。重点介绍了startActivity的调用链、Zygote的forkAndSpecialize方法以及handleChildProc的处理过程。
摘要由CSDN通过智能技术生成

本篇博客将开始介绍Activity启动的详细流程,由于详细启动流程非常复杂,故此分成两篇来介绍。

本篇主要介绍前半部分的启动流程:

  • 1. Activity调用ActivityManagerService启动应用
  • 2. ActivityManagerService调用Zygote孵化应用进程
  • 3. Zygote孵化应用进程

下篇介绍后半部分的启动流程:

  • 4. 新进程启动ActivityThread
  • 5. 应用进程绑定到ActivityManagerService
  • 6. ActivityThread的Handler处理启动Activity的消息

1. Activity调用ActivityManagerService启动应用

activity_amservice

在launcher应用程序里启动应用时,点击应用图标后,launcher程序会调用startActivity启动应用,传递的intent参数:


intent = new Intent(Intent.ACTION_MAIN);
   intent.addCategory(Intent.CATEGORY_LAUNCHER);
   intent.setComponent(className);


activity最终调用Instrumentation的execStartActivity来启动应用:


//Activity类
public void startActivityForResult(Intent intent, int requestCode, Bundle options) {
 if (mParent == null) {
	Instrumentation.ActivityResult ar =
	                mInstrumentation.execStartActivity(
	                    this, mMainThread.getApplicationThread(), mToken, this,
	                    intent, requestCode, options);
	   if (ar != null) {
	                mMainThread.sendActivityResult(
	                    mToken, mEmbeddedID, requestCode, ar.getResultCode(),
	                    ar.getResultData());
	   } 
	//...   
 }else{
  //...
 }



Instrumentation调用ActivityManagerProxy对象的startActivity方法启动Activity,而ActivityManagerProxy只是ActivityManagerService对象在应用进程的一个代理对象,ActivityManagerProxy最终调用ActivityManagerService的startActvity方法启动Activity。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值