• 第一阶段是Linux的启动: Bootloader,Kernel,Driver等
  • 第二阶段是真正的Android的启动

整体流程概括为:启动BootLoader->加载系统内核->启动Init进程->启动Zygote进程->启动Runtime进程->启动本地服务->启动Home Launcher

 

Android启动生命周期流程

第一步:启动Linux

  • Bootloader
  • Kernel

第二步:Android系统启动

  1. Android从Linux系统启动有4个步骤;
  2. init进程启动
  3. Native服务启动
  4. System Server,Android服务启动
  5.  Home启动

 

第三步:应用程序启动

运行PackageManager

 

流程说明

1. Android的servicemanager文件位于/system/bin/servicemanager中,在系统启动一开始会通过源码为ServiceManager.java的文件实例化一个Daemon Process,用于在后台维护系统的运行;

2. 启动/system/bin下的zygote的时候实际上启动了app_main.cpp,该系统文件CPP位于frameworks\base\cmds\app_process\app_mian.cpp文件中;

3. app_main.cpp调用了AndroidRuntime.cpp,然后AndroidRuntime.cpp通过JNI调用了ZygoteInit.java, ZygoteInit.java又调用了SystemServer.java;

4. SystemServer.java通过JNI调用了com_android_server_systemService.cpp,然后通过运行system_init.cpp反过来调用SystemServer.java中的init2()这个方法,此时在init2()这个方法中调用了runtime->callStatic(“com/android/server/SystemServer”,”init2”)启动ServerThread线程

5. 服务线程ServerThread包含下面的功能:

  •   PowerManagerService:电源管理;
  •   ActivityManagerService:组件管理;
  •   WindowManagerService:窗口管理;
  •   PackageManagerService:应用程序是通过该Service启动的
  •   ......

更多相关文章

  1. android 虚拟sd卡
  2. Android(安卓)Studio 官方最新版下载地址(支持国内下载)
  3. Android+JNI调用–文件操作
  4. AIDL跨进程通讯
  5. android客户端程序访问服务器端webservice,几篇不错的文章!
  6. android体系架构
  7. Android(安卓)CountDownTimer的使用
  8. android IOS在WebView 和 JS 交互对比
  9. Unity3D 调用Android原生方法

随机推荐

  1. 为android系统添加USB AUDIO设备的放音
  2. 开发笔记---软键盘遮挡输入框和导航栏遮
  3. [原]如何在Android用FFmpeg+SDL2.0之同步
  4. UIL神器
  5. DRM在Android中(2)——HAL
  6. cocos2dx 在android手机输入特殊字符导致
  7. Android 抽象回调函数以及接口回调更新UI
  8. Android 之 使用File类在SD卡中读取数据
  9. Android如何获得系统(system)权限 !!!
  10. android :图片下载到本地后不让其在相册