android应用的启动过程

 

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)
虚拟机处理

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值