讨论从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. 浅谈Java中Collections.sort对List排序的两种方法
  2. Python list sort方法的具体使用
  3. python list.sort()根据多个关键字排序的方法实现
  4. Android常用的工具类
  5. Android(安卓)单元测试 Robolectric
  6. android入门知识:android使用全局变量
  7. Android:UI更新方法四:在Worker Thread中runOnUiThread直接刷新U
  8. android学习资料
  9. Android退出程序的多种方法

随机推荐

  1. android 按钮置灰效果
  2. Android(安卓)Studio 使用技巧(6)
  3. android studio 配置Kotlin报错Error:Cau
  4. android host修改
  5. Android(安卓)Studio常用插件
  6. TabHost
  7. Android获取物理地址(支持5.0~10.0)
  8. Android(安卓)流媒体系列(二)
  9. Android透明字体画法
  10. android 探索首选项框架 ListPreference