讨论从kernel init之后,android系统启动的过程,参看froyo。

A)init.rc中启动了:

1)servicemanager(源码在frameswork/base/cmds/servicemanager/service_manager.c)

2)app_process(源码在frameworks/base/cmds/app_process/app_main.cpp)

3)mediaserver(源码在frameworks/base/media/mediaserver/main_mediaserver.cpp)

B)app_process的main()中调用了AppRuntime(源码在frameworks/base/core/jni/AndroidRuntime.cpp)的start()方法,将“com.android.internal.os.ZygoteInit”传入。

C)AppRuntime的start()该方法最终调用了ZygoteInit(源码在framewors/base/core/java/com/android/internal/os/ZygoteInit.java)的main()方法,同时该方法将android虚拟机使用的native方法注册了(startReg()).

D)ZygoteInit的main()调用了startSystemServer(),startSystemServer()调用handleSystemServerProcess(),handleSystemServerProcess()调用RuntimeInit.zygoteInit(),RuntimeInit.zygoteInit()调用invokeStaticMain(),这个函数顺利执行最终会扔出异常ZygoteInit.MethodAndArgsCaller。这是一个实现了Runnable的异常,由ZygoteInit的main()捕获并调用run()。

E)MethodAndArgsCaller的run()调用SystemServer的mian()方法,init1()和init2()依次执行,ServerThread线程启动,java层的各service初始化、开始运行。ActivityManagerService的systemReady()被调用。

F)ActivityManagerService的systemReady()最终调用resumeTopActivityLocked(),该方法调用startHomeActivityLocked(),这个方法里构造了呼叫HOME的intent,最终HOME启动。

更多相关文章

  1. 小心XmlPullParser.netText()方法
  2. Android中判断是否有声音在播放
  3. 去掉Android(安卓)app上的Title Bar
  4. android 通话记录的查询与删除
  5. Android内容提供者源码
  6. android之发送短信的方法研究
  7. Android中文API(131) —— GpsStatus
  8. 浅谈Java中Collections.sort对List排序的两种方法
  9. Python list sort方法的具体使用

随机推荐

  1. LinearLayout中实现水平方向上的两个text
  2. 最全的PHP开发Android应用程序
  3. 用Gradle 构建android程序
  4. 第四周Android实习笔记
  5. 裁判文书android app逆向
  6. Mono for Android V1.0 正式发布啦!
  7. 从linux看Android之一--init进程
  8. Android Scripting Environment -ASE
  9. Android(安卓)make 中变量记录
  10. Android——修改开机画面