Android系统启动流程分析

打开adb shell 然后执行ps命令,可以看到首先执行的是init方法!找到init.c这个文件.
然后走init里面的main方法,在这main方法里面执行mkdir进行创建很多的文件夹,和挂载一些目录
然后回去初始化init.rc这个配置文件!在这个配置文件里面回去启动孵化器这个服务,这个服务会去启动app_process这个文件夹,这个文件夹里面有个app_main.cpp这个文件!
然后在app_main.cpp这个c文件里面在main方法里面它会去启动安卓的虚拟机,然后安卓虚拟机会去启动os.zygoteinit这个服务!
zygoteinit这是个java代码写的,然后我们找到了main方法,在这个方法里面我们看到他首先设置虚拟机的最小堆内存为5兆,然后走到preloadclasses()这个方法来加载安卓系统所有的2000多个类通过类加载器加载进来,比如activity,contentx,http,…(其实没有必要一下子全部加载下来,我们可以等用到的时候在加载也可以!)
然后又走preloadresources()这个方法来预加载安卓中定义好的资源比如颜色,图片,系统的id等等。。。都加载了!(其实这也是没必要的! )
然后又走startSystemServer(),这个方法来加载系统的服务!他会先使用natvieJNI去调用C去初始化界面和声音的服务,这就是我们为什么先听到声音和界面的原因!
最后等服务加载完成后也就启动起来了!

== 总结 linux启动->init进程启动(加载init.rc配置)->zygote启动->systemServer启动,systemServer会通过init1和init2启动navite世界和java世界 ==

更多相关文章

  1. SQLite的使用
  2. Android(安卓)手把手教你写EventBus
  3. Android列表小部件(Widget)开发详解
  4. Android蓝牙API之BluetoothAdapter类(1)
  5. Android图像处理之Bitmap类
  6. [置顶] android 多线程Thread,Runnable,Handler,AsyncTask等之间
  7. Android解决在onCreate()中获取View的width、Height为0的方法
  8. Android(安卓)ADB 找不到设备的解决方法
  9. 初学Android,数据存储之SharedPreferences(四十一)

随机推荐

  1. Android(安卓)软键盘不能弹出
  2. Android类参考---HandlerThread
  3. android processBar seekBar 定制(底部间
  4. 关于Android的字体
  5. Android(安卓)两个Fragment之间传递数据
  6. centos安装php扩展mcrypt
  7. Android按键监听和AsyncTask异步处理
  8. recovery 升级'@/cache/recovery/block.m
  9. Android(安卓)APP优化—Android程序员必
  10. Android(安卓)SearchView 焦点问题