本文主要是介绍AMS学习及Binder机制学习,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
AMS是Android中最核心的服务,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似
-
AMS由ActivityManagerNative(以后简称AMN)类派生,并实现Watchdog.Monitor和BatteryStatsImpl.BatteryCallback接口。而AMN由Binder派生,实现了IActivityManager接口。
-
客户端使用ActivityManager类。由于AMS是系统核心服务,很多API不能开放供客户端使用,所以设计者没有让ActivityManager直接加入AMS家族。在ActivityManager类内部通过调用AMN的getDefault函数得到一个ActivityManagerProxy对象,通过它可与AMS通信
AMS由SystemServer的ServerThread线程创建;
应用启动流程:
-
点击桌面App图标,Launcher进程采用Binder IPC向system_server进程发起startActivity请求;
-
system_server进程接收到请求后,向zygote进程发送创建进程的请求;
-
Zygote进程fork出新的子进程,即App进程;
-
App进程,通过Binder IPC向sytem_server进程发起attachApplication请求;
-
system_server进程在收到请求后,进行一系列准备工作后,再通过binder IPC向App进程发送scheduleLaunchActivity请求;
-
App进程的binder线程(ApplicationThread)在收到请求后,通过handler向主线程发送LAUNCH_ACTIVITY消息;
-
主线程在收到Message后,通过反射机制创建目标Activity,并回调Activity.onCreate()等方法。 到此,App便正式启动,开始进入Activity生命周期,执行完onCreate/onStart/onResume方法,UI渲染结束后便可以看到App的主界面。
Binder
首先IPC机制
Binder通信采用C/S架构,从组件视角来说,包含Client、Server、ServiceManager以及binder驱动,其中ServiceManager用于管理系统中的各种服务。架构图如下所示:
binder 一次跨进程通讯,只需要一次拷贝。
图中的Client,Server,Service Manager之间交互都是虚线表示,是由于它们彼此之间不是直接交互的,而是都通过与Binder驱动进行交互的,从而实现IPC通信方式。其中Binder驱动位于内核空间,Client,Server,Service Manager位于用户空间。Binder驱动和Service Manager可以看做是Android平台的基础架构,而Client和Server是Android的应用层,开发人员只需自定义实现client、Server端,借助Android的基本平台架构便可以直接进行IPC通信。
ServiceManager是由init进程通过解析init.rc文件而创建的
这篇关于AMS学习及Binder机制学习的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!