您的位置:首页 > 移动开发 > Android开发

android(二)、 应用启动过程

2016-07-12 15:07 465 查看
  自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.processName, uid, uid, gids, debugFlags, mountExternal,

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

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

pid = Zygote.forkAndSpecialize(parsedArgs.uid, parsedArgs.gid, parsedArgs.gids,


parsedArgs.debugFlags, rlimits, parsedArgs.mountExternal, parsedArgs.seInfo,

parsedArgs.niceName);

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

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

4、执行Activity的创建和显示操作步骤。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息