Android系统服务-AMS

一,前导知识:系统进程运行环境的初始化

Context是一个抽象类,它可以访问Application环境全局信息和各种资源信息和类,其常用功能如下:
-对Activity、Service生命周期的管理
-通过Intent发送广播/注册广播接收者
-访问APK各种资源,如Resources,AssertManager等
-访问Package的相关信息
-APK的权限管理
总而言之,Context就像一个无所不知的大管家,需要什么东西,找它要就好了,它的家族关系如下图:
在这里插入图片描述
由图可知,Activity、Service、Application都实现了Context的包装类,调用的各种方法,最终都是由ContextImpl来实现,所以实际上ContextImpl才是那个无所不知的大管家。
Android的进程分为两种:系统进程和应用进程。而ActivityThread就是应用进程的主线程,应用进程启动后首先要执行的就是它的ActivityThread的main方法,应用进程也是通过ActivityThread来和AMS通信,调度和执行四大组件。
系统进程:SystemServer是Android的系统进程,由于它也有Activity和一些系统资源,所以为了保证调用方式的统一,它也需要Activity和Context等运行环境,因此SystemServer也是一个特殊的应用程序。
系统Context的创建过程:
开机->加载引导程序到RAM->进入到Kernel层启动第一个进程swapper(pid=0),加载各种驱动,初始化进程管理、内存管理->启动kthread进程(pid=2),这是所有内核进程的鼻祖->init进程(pid=1),所有用户空间进程的鼻祖,启动一些守护进程和servicemanager等重要服务->孵化出zygote进程(已经进入运行层),加载虚拟机,注册JNI->启动SystemServer进程(管理所有JAVA API Framework),同时zygote也会启动多个APP进程,第一个是Launcher进程,所有APP进程都是由zygote孵化而来。
在SystemServer启动之后,执行createSystemContext()方法,在该方法内部会完成系统进程运行环境的初始化,包括创建ActivityThread线程,ResourcesManager对象的创建和初始化,LoadedAPK的创建和初始化,LoadedAPK代表一个系统进程APK,它里面存储资源文件的位置、JNI包的位置等,代表的就是Framework-res-apk,ContextImpl的构造方法创建一个Context,会将ResourcesManager、LoadedAPK加载进去,最终生成一个和系统进程相关的Context。
ActivityThread和Context就构成了Android程序的运行环境。

二,AMS简介

AMS(ActivityManagerService)是Android中最核心的服务,位于应用框架层,主要负责系统中四大组件的启动、切换、调度及应用进程的管理和调度等工作,其职责与操作系统中的进程管理和调度模块相类似,因此它在Android中非常重要;
ActivityTaskManagerService(以下简称ATMS)是Android 10新增加的系统服务类,承担了ActivityManagerService(AMS)的部分工作(activities、task, stacks, displays相关),比如将Activity的启动相关的调用转移到了ATMS中。

AMS功能:
-组件状态管理:包括四大组件的开启,关闭等一系列操作,如startActivity,startActivityAndWait,activityPaused,startService,stopService,removeContentProvider等;
-组件状态查询:查询组件当前运行等情况。如getCallingActivity,getService等;
-Task相关:包括removeTask,removeSubTask,moveTaskBackwards,moveTaskToFront等;
-AMS是通过ActivityStack及其他数据结构来记录,管理系统中的Activity及其他组件状态的,并提供查询功能的一个系统服务;

三,AMS启动流程

Zygote进程会创建SystemServer进程,AMS是在SystemServer中启动的:
在这里插入图片描述
SystemServer.run()方法源码如下:

在这里插入图片描述
在run()方法中新建一个SystemServiceManager对象,然后将其加入到本地服务列表中,接着启动三类服务:引导服务、核心服务、其他服务,AMS就是引导服务中的一个:

1.private void startBootstrapServices() {
2.        // Activity manager runs the show.
3.     mActivityManagerService = mSystemServiceManager.startService(ActivityManagerService.Lifecycle.class).getService();
4.     mActivityManagerService.setSystemProcess();
5.……
6.     mActivityManagerService.installSystemProviders();
7.……
8.     mActivityManagerService.systemReady(new Runnable() {
9.            @Override
10.            public void run() {
11.                Slog.i(TAG, "Making services ready");
12.                mSystemServiceManager.startBootPhase(
13.                     SystemService.PHASE_ACTIVITY_MANAGER_READY);
14.                try {
15.                    mActivityManagerService.startObservingNativeCrashes();
16.                } catch (Throwable e) {
17.                    reportWtf("observing native crashes", e);
18.                }

以上几个方法就是AMS启动的几个主要方法,其作用如下:
1,创建AMS对象,并启动服务
2:将AMS所在的系统进程,添加到进程管理中去(这一步即完成了AMS注册到SystemManager中)
3:为系统进程安装ContentProvider对象
4:在systemReady方法中做善后操作

startService方法:
在这里插入图片描述
方法的参数是Lifecycle.class,它继承自SystemService,通过反射创建一个Lifecycle实例,然后将新得到的service添加到ArrayList类型的mService中完成注册,Lifecycle也是AMS的内部类,其结构如下:
在这里插入图片描述
可以看出,在Lifecycle创建实例时也会创建一个AMS实例,当Lifecycle调用onStart()方法时,实际上是调用AMS的onStart()方法,调用getService()方法时,其实返回的是AMS,于是AMS就被创建、启动并返回。
AMS的构造方法:
AMS的构造方法很复杂,主要做了一些初始化的相关操作,先保存了自己运行环境ActivityThread和Context,初始化了四大组件和电量统计服务等。
AMS的start方法:启动了一些服务,并且把AMS自己也加入到localService中供程序内部调用,总之构造方法和start方法都是在做一些初始化相关操作。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AOKU AMS流媒体直播服务系统是北京北极星通信息技术有限公司研发的一套基于IP网络的音视频应用平台,采用模块化,跨平台的架构设计,采用自主研发的高性能 流媒体服务引擎,支持多种主流流媒体协议(RTP、 RTMP等);支持直播、点播、录播等多种应用模式;支持PC机、手机、机顶盒等多种接入终端。方便用户建立多种应用模式。    AOKU AMS系统内置高性能流媒体服务器,Web服务器,可直接提供基于Web的Flash直播、点播应用。是可以迅速构建Flash平台的利器。   奥酷流媒体直播服务软件AMS系能特点: 1、支持TCP、UDP协议,支持单播、组播等多种应用模式,支持TS、RTMP、RTSP、HTTP、UDP等多种协议; 2、支持高清,标清直播,支持在线点播、视频直播、视频广播等业务,支持虚拟文件直播功能,可编排文件直播列表; 3、可通过任何IP网络提供流媒体业务,能够跨越代理服务器、防火墙; 4、能够对rtmp流进行二次转发,同时转发给多个rtmp流媒体服务器; 5、响应点播时间控制在100ms以内,支持暂停、拖动等特技操作,无需下载播放器直播延时可控制在1s左右; 6、AMS服务器支持部署到Windows、Linux、Unix等多种操作系统上,单台AMS最多支持多达500个单播用户的接入,并支持组播发布模式,可以使接收用户多达无限,通过AMS服务器的集群部署,也能够支持成千上万的单播用户接入; 7、支持H.264 MP3或者H.264 AAC直播,支持Windows,Android,IOS平台免下载插件观看; 8、支持flash、VLC、WMP、暴风影音等多种播放器接入,使得应用更加广泛; 9、除了正常接收奥酷的硬件编码器发布的直播流外,还能够接收来自FME上的直播流; 10、支持直播同时进行录像、可设置录像任务,可录制mp4或者FLV格式的文件,无需转码,可直接供客户端进行点播; 11、开放的系统架构,提供二次开发接口,可轻松的融入到用户已有的平台或网站平台中、或在此基础上进行二次开发等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值