美文网首页
APP如何启动

APP如何启动

作者: 福later | 来源:发表于2018-06-20 15:25 被阅读0次

    1:从程序员的角度来理解APP到底是什么?

    2:简单介绍启动流程

    3:知道启动流程对于做应用层开发者有什么用

    APP到底是什么?

    我是这样理解的,APP是一个特殊的Java应用程序。
    1:语言相通(Java);
    2:平台都是基于Java虚拟机虽然Java称JVM,Android称DVM ;
    3:Android 的 UI 借鉴了Java的 GUI

    启动流程

    详细流程请看:
    老罗的Android 之旅
    凯子哥带你学Framework
    关于启动流程,有太多的博客文章分析,本文就不在重复造轮子了,本文主要缕下大致几个重要步骤
    大家知道每启动一个新的APP, Android系统都要为其启动一个虚拟机并分配一个新的进程,Android 中所有的进程都是由Zygote 孵化而来,那么Zygote 怎么知道什么时候该创建一个新的进程呢,其实这都是由AMS(ActivityManagerService-->startProcessLocked() 方法) 通知的,怎么通知呢,Socket,Zygote进程中有一个循环线程专门来处理接受Socket 信息从而创建新的虚拟机,分配进程,然后在启动调用main方法(这其中还涉及其他流程,暂不细说),也就是ActivityThread 中的main方法。
    ActivityThread 是什么?他有什么作用?ActivityThread 是一个APP的基石,没有ActivityThread也就没有APP,它主要负责创建和AMS通讯的ApplicationThread;创建Looper,MainHandler;初始化自己;启动流程时序图如下

    app_start.png
    1:在main方法中,如果是系统APP就不会走以上流程,直接在ActivityThread.attach() 方法中创建Instrumentation,ContextImpl,Application,并调用Application.onCreate() 方法,如果不是系统APP,则在ActivityThread.handleBindApplication() 方法中创建Instrumentation,ContextImpl 对象
    2:为什么在APP启动的时候就要创建Instrumentation,ContextImpl 这两个对象,ContextImpl重要性不言而喻,很多SDK API是通过该对象暴露给应用层的,Instrumentation同样重要,他负责调用Activity生命周期的那几个方法;

    我们为什么要知道以上流程

    1:绝不是为了装B
    2:你在熟悉的过程中本身就是一种学习,这么优秀的框架放在你面前你却不珍惜?
    3:万变不离其中,孰能生巧
    4:面试的时候有话谈,感觉和1矛盾,哈哈

    相关文章

      网友评论

          本文标题:APP如何启动

          本文链接:https://www.haomeiwen.com/subject/vhkxyftx.html