码迷,mamicode.com
首页 > 其他好文 > 详细

启动的流程

时间:2019-02-24 10:27:58      阅读:153      评论:0      收藏:0      [点我收藏+]

标签:ubunt   任务   虚拟机   process   native   自身   python   oge   .cpp   

源码的下载 
如果下载源码的目的是为了编译 android的源码 
推荐使用 linux或者 mac 下载

ubuntu 图形化界面比较靠谱 4月 10月

lamp linux apache mysql php/python 
centos redhat 运维

源码的编译 
souceInsight的使用

1 启动的流程 按下电源键开始一直到 桌面运行起来 
① 加载 bootloader 通过bootloader来加载硬件的驱动 加载linux内核 
②启动linux 内核 运行的第一个进程 init进程 
init.c main函数中 解析了一个配置文件 init.rc 
init.rc中有比较重要的命令

service zygote /system/bin/app_process -Xzygote /system/bin --zygote --start-system-server

    class main

    socket zygote stream 660 root system

    onrestart write /sys/android_power/request_state wake

    onrestart write /sys/power/state on

    onrestart restart media

    onrestart restart netd

 

以服务的形式把zygote进程启动起来 
zygote 直接翻译受精卵意思 
它是所有的android应用 和 重要的系统进程的父进程 
android应用的进程都是 zyote进程通过复制自身的形式创建起来的

App_main.cpp 
调用了 AndroidRuntime这个类的 start方法 
这个方法启动了 art虚拟机 并且通过JNI调用 通知虚拟机反射的方式调用了 
zyogeInit.java的 main方法 
这样就从c/C++(native 世界) 来到了java虚拟机的世界中

ZygoteInit.java 
zygote进程的初始化 
①创建了一个socket服务端 等待ams和它联系 (进程间通信使用的是socket的方式) 
② 预加载 包括application framework层中 写代码用到的字节码 加载了系统自带的图片 颜色资源 
③ 启动第一个子进程 systemserver进程 
④ 开启了死循环等待ams发消息

SystemServer进程的启动 
zygote在初始化的时候调用了 startSystemServer方法 创建出zygote复制出的第一个进程 
通过反射调用了SystemServer.java的main方法 
先通过JNI的调用 开启native服务 
创建了ServerThread线程 在这个线程中创建系统服务 把所有的系统服务添加到ServiceManager中 
用key-value的形式进行管理 所以 在应用开发时获取系统服务 getSystemService(key)

当所有的系统服务都创建好了 就会走到 ActivityMangerService的 systemReady方法 
这个时候判断当前的任务栈是否有activity 
如果没有说明是刚启动起来 这个时候就启动桌面

启动的流程

标签:ubunt   任务   虚拟机   process   native   自身   python   oge   .cpp   

原文地址:https://www.cnblogs.com/nangongyibin/p/10425304.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!