走进Android世界,指尖轻轻的触碰即可打开一个个缤纷多彩的应用,即可享受极致的交互体验。到底是谁在背后操纵这一切,默默维护着秩序?
角色登场:
系统服务: ActivityManagerService (AMS管理组件生命周期等); WindowManagerService(WMS管理窗口展示); PackageManagerService (PKMS记录并管理所有包体相关信息):
应用概念:Application (实际作用域:更加贴合进程; 若APP中有多个进程,则会创建多个Application)
主线程:ActivityThread (应用的主线程,承接了与AMS服务交互(AMS通过ApplicationThread与应用进程交互),于此同时调度当前进程中的组件周期变化)
组件:Activity,Service,ContentProvider, BroadCast
关系分解:
(1) 系统服务与四大组件: Android系统中设计不同服务的管理,如AMS,WMS,PKMS等,其目的是统筹对所有运行在系统上的应用进行管控。于此同时,系统服务框架的构建屏蔽了开发者开发应用需向底层交互的细节。系统服务搭建了一套快速构建应用的模板(就是我们常用的四大组件)
而每个组件都是职责明确的: Activity主要维系用户交互, Service主要用于长时间驻留后端处理事务, ContentProvider主要用于存储应用数据, BroadCast主要维系着不同应用之间的通知;
应用开发者需要用利用好四大组件即可生产出好的应用产品。
(2) Application与四大组件: Application与四大组件相同点都是模板,供系统服务调度。区别在于作用域: Application的作用域为当前进程, 而四大组件的作用域小于Application。以Activity为例: 正常调度的话,其作用域为具体页面存活时间。
(3) Application与主线程: Application逻辑上是应用的概念,其作用域可以理解为进程;
主线程(可以理解为应用进程的大管家):每一个进程都会有一个主线程;ActivityThread中负责分发创建Activity,Application以及生命周期状态同步更新,于此同时还与AMS等系统服务交互, 内部还支持AMS向应用进程通信(ApplicationThread)。
小结:
以上主要简述应用与系统服务之间基本交互流程。
(1) AMS服务通过ActivityThread中的ApplicationThread(Bn端)进程间通信,通知应用发生变化
(2) 而应用直接可与AMS进程间通信,通过ActivityManager Bp端进行跨进程通信
(3) ActivityThread接受AMS消息后,分发调度执行组件相关操作