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;
app.info.targetSdkVersion, null, null);
2、Process收到创建进程的信息后,通过LocalSocket访问LocalServerSocket,向LocalServerSocket(ZygoteInit中)发送创建进程的消息。
3、ZygoteConnection中的LocalServerSocket收到请求后,执行了
parsedArgs.niceName);
而后调用了ZygoteInit.invokeStaticMain(ClassLoader
loader,String className, String[] argv)
将收到的参数android.app.ActivityThread 用反射的方式调用ActivityThread的main方法,这样用户进程便创建完毕。
4、执行Activity的创建和显示操作步骤。
比较重要的部分如下:
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的创建和显示操作步骤。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories