APP启动笔记1

APP启动笔记1_第1张图片

  0:01:11
Instrumentation类里面的方法大多数和Application和Activity有关,这个类就是完成对Application和Activity初始化和生命周期的工具类。比如,callActivityOnCreate()

 0:02:04
ActivityManager的功能是与系统中所有运行着的Activity交互提供了接口

 0:29:02
ActivityStarter 类启动器

APP启动笔记1_第2张图片

APP启动笔记1_第3张图片

APP启动笔记1_第4张图片

1.从系统服务启动APP(AMS),属于systemserver。这里对应安卓四层框架的Framework,通过Framework启动的应用。最核心的就是systemserver进程。这里有一个疑惑,开机过程中有systemserver进程,但Framework中却没有。

存在一个误解的知识:

ams和wms是不是独立进程。不是。是系统服务。属于Framework的服务。在systemserver初始化的时候生成的。是systemserver中的一个服务。

2.APP要启动另外一个APP,没办法直接启动的,要借助systemserver,实际上就是AMS。AMS非常广泛,现在10以后拆分成ams+atms。

3.app是一个进程,systemserver也是一个进程。两者之间的交互,涉及到跨进程通信。这里能否直接通信。不能。涉及进程隔离。使用binder。

存在一个误解的知识:

使用binder来通信,使用AIDL来完成通信。错了,对原理不理解的错误认识。------后面ams会讲systemserver加载服务

systemserver有70多个服务。如果可以通信,app可以拿到systemserver里面很多服务。这样systemserver不光要管理它的服务,还要管理app。这不符合systemserver设计的面向对象和单一原则,即管理一系列服务。至于服务要和app通信,做了一个转折(代理) servermanager。ams和wms会加到这里面来。servermanager会作为一个系统服务,提供一个专门的进程,间接持有了systemserver里面所有的服务,保存了所有服务的binder。Lancher通过servermanager拿到ams的binder,去通知zygote fork进程。

搜集手机里面所有的进程,验证servermanager是一个单独进程,他的父进程是init

产生隔离的优势,进程安全。anr crash oom.

为什么app已经挂了,为什么还要log产生?原因是进程之间是相互隔离的。关联的进程不受挂掉的进程影响。

ams如何启动zygote。zygote fork一个新进程,就会分配一个虚拟机,对应四层结构里面的Android Runtime。虚拟机是什么,虚拟机和进程之间的关系是什么?为什么存在虚拟机?虚拟机的功能,说白了是一个内存管理工具以及字节码转换的工具,仅此而已。帮助进程管理内存。当fork、出进程之后,会有一大块内存。通过adb命令可以查到。

 

你可能感兴趣的:(其他,android)