zoukankan      html  css  js  c++  java
  • 安卓运行环境(四)

    Linux系统的启动过程,在该过程的最后,内核将读取initrc文件,由于Android系统相对于Linux内核而言仅仅是一个Linux应用程序而已,因此,安卓的启动也是在init.rc中被声明

    Linux系统中运行的第一个Dalvik虚拟机程序叫做zygote,接下来的所有Dalvik虚拟机进程都是通过这个“ 卵” 孵化出来的。

     zygote进程

     包含两个主要模块

           Socket服务端:该Socket服务端用于接收启动新的Dalvik进程的命令

           Framework共享类及共享资源:zygote进程预先会装载共享类和共享资源,这些类及资源实际上就是SDK中定义的大部分类和资源

      zygote孵化出的第一个Dalvik进程叫做SystemServer

      SystemServer中创建了一个Socket客户端,并有AmS负责管理该客户端,之后所有的Dalvik进程都将通过该Socket客户端间接被启动

      当需要启动新的APK进程时,AmS中会通过该Socket客户端向zygote进程的Socket服务端发送一个启动命令,然后zygote会孵化出新的进程。(使用fo lk 启动新的进程)

     从系统架构的角度来讲,就在于此即先创建一个zygote,并加载共享类和资源,然后通过该zygote,去孵化新的Dalvik进程。
     

     dx工具

      $ adb push foo.jar /data/app                                   装载到目录
      $ adb shell dalvikvm -cp /data/app/foo.j ar Foo         运行

    SystemServer进程

    SystemServer进程在Android的运行环境中扮演了 “神经中枢” 的作用,APK应用中能够直接交互的大部分系统服务都在该进程中运行, 常见的比如WindowManagerServer ( Wms ) 、
    ActivityManagerSystemService (AmS)、PackageManagerServer (PmS) 等,这些系统服务都是以一个线程的方式存在于SystemServer进程中

    AMS启动第一个activity的过程。

    其实AMS启动第一个activity就是去activity栈中去读取第一个activity,所以用户可以自动的灵活的进行配置。

    如果栈中没有activity系统则系统发出 了一个 catagory 字段包含 CATEGORY—HOME的intent。只要用户自己去响应即可。

    如果有多个响应,系统会让用户进行选择。

  • 相关阅读:
    HDU1150(最小顶点覆盖)
    HDU2444(二分图判定+最大匹配)
    HDU1083(最大匹配)
    POJ3041(最小顶点覆盖)
    HDU2874(LCA应用:求两点之间距离,图不连通)
    UESTC(LCA应用:求两点之间的距离)
    HDU2586(LCA应用:在带权树中求任意两点之间的距离)
    POJ1986(LCA应用:求两结点之间距离)
    jmeter(54)-jmeter元件的作用域与执行顺序
    jmeter(53)-如何保证jenkins+ant+jmeter持续集成接口自动化生成的测试报告不会重复?
  • 原文地址:https://www.cnblogs.com/sunfan1988/p/4377435.html
Copyright © 2011-2022 走看看