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 . targetSdkVersion null null );

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的创建和显示操作步骤。

猜你喜欢

转载自blog.csdn.net/jiabailong/article/details/51886785