android(二)、 应用启动过程

  自android 的framework框架启动后,运行一个应用的环境已经准备好了。

比较重要的部分如下:

  ActivityManagerService主要负责管理Activity,Service,BroadcastReceiver。

  WindowMangerService负责窗口管理,窗口的创建,添加显示,删除。

  ActivityThread应用程序主线程代理,负责与外部进行通信;ActivityThread内部有一个ApplicationThread内部类,它是Binder的子类,是ActivityThread对外通信的接口。ActivityThread是应用程序的实际操作者(实际操作Activity,Service,BroadcastReceiver);

  ZygoteInit-主要负责进程的创建,android(linux)中一般是fork(COW:Copy-On-Write )一个新进程。

  ZygoteConnection-封装了ZygoteInit中LocalServerSocket中的处理请求。

  这里就先说一下用户进程。当用户第一次点击手机上应用的图标,会去加载开发者设置的主Activity。

1、首先会Launcher会发送一个创建Activity的信息到ActivityManagerService,ActivityManagerService首先会检测Activity所在的所在的进程是否已经创建,如果没有那么就会发送创建信息到到Process;

 

Process.ProcessStartResult startResult = Process.start("android.app.ActivityThread",
app.processNameuiduidgidsdebugFlagsmountExternal,
app . info . targetSdkVersionnullnull );

2、Process收到创建进程的信息后,通过LocalSocket访问LocalServerSocket,向LocalServerSocket(ZygoteInit中)发送创建进程的消息。

3、ZygoteConnection中的LocalServerSocket收到请求后,执行了

 

pid = Zygote.forkAndSpecialize(parsedArgs.uidparsedArgs.gidparsedArgs.gids,
parsedArgs.debugFlagsrlimitsparsedArgs.mountExternalparsedArgs.seInfo,
parsedArgs . niceName );

 

而后调用了ZygoteInit.invokeStaticMain(ClassLoader loader,String className, String[] argv)

将收到的参数android.app.ActivityThread 用反射的方式调用ActivityThread的main方法,这样用户进程便创建完毕。

4、执行Activity的创建和显示操作步骤。

 

转载于:https://www.cnblogs.com/qcjd/p/9324858.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值