android应用的启动过程
2010-12-17 19:47
225 查看
1. 说明
应用的启动过程通常是通过startActivity函数,无论是在应用中调其它应用还是在桌面(桌面是Launcher应用)上点击,最终都将通过这个函数启动进程或者界面,下面以分析代码的方式,介绍它具体的工作过程
2. 过程
1) Launcher/src/com/android/launcher.java
在应用或桌面上启动应用,例如桌面应用的启动由于中调用了startActivity()函数
2) frameworks/base/core/java/android/app/Activity.java:startActivity()
Activity.java继承了Context.java,并实现了它的startActivity(),它向下调用了execStartActivity()
3) frameworks/base/core/java/android/app/Instrumentation.java:execStartActivity()
execStartActivity利用IntentFilter得到具体Activity,并调用了更下层的startActivity
4) frameworks/base/core/java/android/app/ActivityManagerNative.java
ActivityManagerProxy.startActivity()
IBinder.transact(….);
它通过Binder的方式与ActivityManagerService.java通讯,并发送启动请求
5) frameworks/base/core/java/android/os/Binder.java:execTransact()
Binder消息转递的实现,用于用户应用与后台服务的通讯
6) frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
onTransact();
startProcessLocked();
开启新线程
7) frameworks/base/core/java/android/os/Process.java的函数start为入口
通过socket发给zygote进程
8) frameworks/base/core/java/com/android/internal/os/Zygote*.java
告知虚拟机新建进程,此时会将要建立的进程名,用户名,组名一并传给虚拟机,以建立进程
9) dalvik/libcore/dalvik/src/main/java/dalvik/system/Zygote.java
虚拟机处理
10) dalvik/vm/native/dalvik_system_Zygote.c (forkAndSpecializeCommon)
虚拟机处理
应用的启动过程通常是通过startActivity函数,无论是在应用中调其它应用还是在桌面(桌面是Launcher应用)上点击,最终都将通过这个函数启动进程或者界面,下面以分析代码的方式,介绍它具体的工作过程
2. 过程
1) Launcher/src/com/android/launcher.java
在应用或桌面上启动应用,例如桌面应用的启动由于中调用了startActivity()函数
2) frameworks/base/core/java/android/app/Activity.java:startActivity()
Activity.java继承了Context.java,并实现了它的startActivity(),它向下调用了execStartActivity()
3) frameworks/base/core/java/android/app/Instrumentation.java:execStartActivity()
execStartActivity利用IntentFilter得到具体Activity,并调用了更下层的startActivity
4) frameworks/base/core/java/android/app/ActivityManagerNative.java
ActivityManagerProxy.startActivity()
IBinder.transact(….);
它通过Binder的方式与ActivityManagerService.java通讯,并发送启动请求
5) frameworks/base/core/java/android/os/Binder.java:execTransact()
Binder消息转递的实现,用于用户应用与后台服务的通讯
6) frameworks/base/services/java/com/android/server/am/ActivityManagerService.java
onTransact();
startProcessLocked();
开启新线程
7) frameworks/base/core/java/android/os/Process.java的函数start为入口
通过socket发给zygote进程
8) frameworks/base/core/java/com/android/internal/os/Zygote*.java
告知虚拟机新建进程,此时会将要建立的进程名,用户名,组名一并传给虚拟机,以建立进程
9) dalvik/libcore/dalvik/src/main/java/dalvik/system/Zygote.java
虚拟机处理
10) dalvik/vm/native/dalvik_system_Zygote.c (forkAndSpecializeCommon)
虚拟机处理
相关文章推荐
- Android-应用启动过程
- android 应用启动过程解析
- 项目清单文件分析与第一个ANDROID应用的启动过程
- cocos2d-x_Android应用启动调用过程简析
- Android 应用的启动过程
- Android 应用的安装与启动过程(学习笔记)
- Android应用启动过程
- Android 8.0系统源码分析--应用进程启动过程分析
- Android系统应用层App启动过程分析
- 第15章 Android启动过程 [Android应用开发与系统改造实战]
- android(二)、 应用启动过程
- Android底层启动过程(应该说是应用进程init启动后的一些步骤)
- Android 插件化开发——应用的启动过程源码解析(简单清晰)
- Android 系统启动时 PackageManagerService 对应用组件信息表的构建过程
- 源码分析Android 应用进程的启动过程
- (大总结)从寻找fragment静态导入activity总是失败的解决方法中了解android应用的系统启动过程
- android学习--Activity及应用启动过程
- Android应用框架之应用启动过程
- Android应用框架之应用启动过程详解
- Android应用启动过程浅析