APP如何启动
2018-06-20 本文已影响0人
福later
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;初始化自己;启动流程时序图如下
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矛盾,哈哈