android的启动过程(代码)
来源:互联网 发布:ubuntu下载安装jdk 编辑:程序博客网 时间:2024/05/19 02:01
开机启动内核后
启动 init进程,
它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程.
init程序在/system/core/init/init.c的main开始(init.c干了很多事,
但是比较和android有关系的,应该算init.rc脚本,有兴趣的可以查阅init.c)
解析init.rc,将所有服务和操作信息加入链表
init.rc在源码/system/core/rootdir/init.rc
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启动。
启动 init进程,
它是一个由内核启动的用户级进程。内核自行启动(已经被载入内存,开始运行,并已初始化所有的设备驱动程序和数据结构等)之后,就通过启动一个用户级程序init的方式,完成引导进程。init始终是第一个进程.
init程序在/system/core/init/init.c的main开始(init.c干了很多事,
但是比较和android有关系的,应该算init.rc脚本,有兴趣的可以查阅init.c)
解析init.rc,将所有服务和操作信息加入链表
init.rc在源码/system/core/rootdir/init.rc
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启动。
- android的启动过程(代码)
- android启动过程详解(代码)
- Android 启动过程代码跟踪
- Android APP启动过程中应用代码的加载
- Android的启动过程
- android的启动过程
- android的启动过程
- android的启动过程
- android的启动过程
- android的启动过程
- android的启动过程
- Android的启动过程
- 从内核代码初探Linux的启动过程(一)
- android应用的启动过程
- android应用的启动过程
- android应用程序的启动过程
- Android App的启动过程
- Android系统的启动过程
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- 进入recovery模式玩玩
- superuser 拒绝shell获得最高权限
- view.invalidate()原理
- android字体的工作原理
- android的启动过程(代码)
- ActivityThread-activity启动分析
- Android中JNI编程的那些事儿
- ubuntu最近使用到的
- ZOJ 2481 Unique Ascending Array
- ubuntu增加启动运行脚本
- adb shell error: 问题
- ubuntu开机挂在分区
- 用到的linux命令