wms和ams的关系:
1.wms,ams, atms都不是独立的进程,
2.这些服务都是属于SystemServer进程中的服务,所以可以相互通信不需要IPC(跨进程通信),如图2红色区域
3.都是在手机启动SystemServer时就启动了(都是为了给应用使用的,所以在应用启动之前它们就应该存在)
ams=ams+atms:四大组件的管理
atms:ams过于庞大android10之后把activity的管理从ams中抽出
图1:
图2:
图3:
launcher 与ams通信通过binder,binder来自Servicemanager,app一启动就可以通过sm拿到这些服务的binder
为什么手机启动时要启动systemServer?为了拿到ams,wms等服务,因为ams,wms在systemserver中,一旦ams wms创建后就会把binder自己的binder存到sm,app创建后也会把自己的binder给到ams由ams进行管理(也就是存到systemServer)(如图3)
手机启动时会启动init进程,init会启动sm进程(属于app的守护进程,由sm帮我们拿到ams或wms服务的binder),再通过binder调用ams的代码,再由ams发送socket请求让zygote fork一个进程
ams如何拿到app的binder:
app启动会创建ActivityThread,然后调用attach
attach中会拿到ams(mgr),然后调用attachapplication把mAppThread(就是一个binder)传给ams
图4
每个应用都有自己的虚拟机在zygote中启动(虚拟机的作用是内存管理)
虚拟机的作用:
app为什么能一直运行?
有一个死循环(looper.loop())