Android Framework相关知识

目录

一 Android 系统启动流程(开机过程)

1.Bootloader引导

2.init进程启动

3 Zygote进程启动

4 SystemServer进程启动

5 .Launcher进程启动

二 Android系统中,点击桌面图标到应用启动的流程

1 Launcher进程请求AMS(跨进程)

2  AMS发送创建应用进程请求到zygote进程

3 Zygote进程创建应用程序进程,同时创建应用程序的Binder线程池

4 应用程序发送请求到AMS中,将ApplicationThread绑定AMS

5 AMS发送启动Activity的请求

6 ActivityThread的Handler处理启动Activity的请求


一 Android 系统启动流程(开机过程)

1.Bootloader引导

  • 当电源按下时,引导芯片代码 从 ROM (4G)开始执行。Bootloader引导程序把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行,启动Linux内核
  • Linux kernel内核启动,会做设置缓存,加载驱动等一些列操作
  • 当内核启动完成之后,启动init进程,作为第一个系统进程,init进程从内核态转换成用户态

2.init进程启动

  • 文件目录的创建及挂载,属性服务的创建
  • fork出ServerManager子进程。 ServerManager主要用于管理我们的系统服务,他内部存在一个server服务列表,这个列表中存储的就是那些已经注册的系统服务
  • 解析init.rc配置文件并启动Zygote进程

3 Zygote进程启动

在zygote进程中,它是Java层进程的鼻祖,其中,做了很多事情:

  • 初始化AndroidRuntime环境
  • 设置为zygote启动模式
  • 启动zygoteInit 通过runtime.start(),在start函数中也做了很多事情
  1. startVm创建虚拟机
  2. startReg注册JNI方法
  3. 使用JNI调用ZygoteInit的main()函数,进入Java世界

        在main方法中做了一些事情:

        (1)预加载信息(加载了一部分framework资源以及常用的java类),加快了后面应用进程的启动速度(可以直接使用前面的预加载信息)

        (2)创建Socket进程通信机制

        (3)创建systemserver进程,执行systemserver main方法

        (4)zygote进入无线循环,等待AMS给它发送通知,fork应用程序进程

4 SystemServer进程启动

在zygote进程创建system_server进程后,在system_server进程中我们启动了binder线程池ams,wms,等

        通过反射调用SystemServer.main(),比较重要的几件事
         1 加载动态库
         2 创建系统上下文
         3 创建SystemServerManager(这个是管理这些SystemServer的生命周期的),startServer()
            3.1 反射创建服务
            3.2 执行服务的onStart方法
            3.3 返回该服务的对象
         4 启

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值