BOB(中国)官方入口-BOB平台在线入口

栏目分类
热点资讯
BOB体育首页
你的位置:BOB(中国)官方入口-BOB平台在线入口 > BOB体育首页 > BOB体育首页 深入分析AMS启动流程
BOB体育首页 深入分析AMS启动流程

发布日期:2021-11-21 06:59    点击次数:134

序言 BOB体育首页

AMSAndroid的核压服务之一,对于framework各个核压服务,倘若不是特意往做framework开发,先晓畅其基本的流程机制,再徐徐深究;

今天吾们就学习下AMS

一、AMS功能概述 1、AMS介绍 AMS是Android中最中央的服务,主要负责编制中四大组件的启动、切换、调度及行使进程的管理和调度等做事,其职责与操作编制中的进程管理和调度模块相相通,因此它在Android中特意主要; 组件状态管理:包括四大组件的开启,关闭等一系列操作,如startActivity,startActivityAndWait,activityPaused,startService,stopService,removeContentProvider等; 组件状态查询:查询组件目前前运走等情况。如getCallingActivity,getService等; Task相关:包括removeTask,removeSubTask,moveTaskBackwards,moveTaskToFront等; AMS是经历ActivityStack及其他数据组织记录,管理编制中的Activity及其他组件状态的,并挑供查询功能的一个编驯服务; 2、AMS中主要的数据组织

ActivityRecord:记录了Activity的一切新闻,因此它用描述一个activity。它是在activity启动时被创建的,详细是在ActivityStarter的startActivity中被创建的。它存储的新闻主要包括以下内容:

service:AMS的引用 info:ActivityInfo,Activity中代码和AndroidManifest竖立的节点新闻,如launchMode launcherFromPackage:启动activity的包名 taskAffinity:activity期待归属的栈 task:TaskRecord,Activity所在的TaskRecord app:ProcessRecord,ActivityRecord所在的行使程序进程 state:ActivityState,目前前activity的状态 icon:Activity的图标资源和英俊符 theme:Activity的主题资源标识符

TaskRecord:用描述一个Activity义务栈

taskId:义务栈的唯一标识符 affinity:义务栈的倾向性 Intent:启动这个activity的intent mActivites:ArrayList,遵命历史挨次排列的Activity记录 mStack:ActivityStack,目前前归属的ActivityStack mService:AMS的引用

ActivityStack:用管理编制一切的Activity,内部维护了Activity的一切状态,稀奇状态的Activity以及和Activity相关的列外等数据;

二、AMS服务的启动流程详解 1、startBootstrapServices
private void startBootstrapServices;                 } 

SystemServer中关于AMS启动时的几个关键手段,主要分为4个步骤

创建AMS对象,并启动服务 将AMS所在的编制进程,增补到进程管理中往 为编制进程装配ContentProvider对象 在systemReady手段中做善后操作 一个一个的望先这些手段的作用,这些手段就是AMS的启动和初起化过程; 2、ActivityManagerService

启动ActivityManagerService的手段

mActivityManagerService=mSystemServiceManager.startService(

ActivityManagerService.Lifecycle.class).getService;BOB体育首页

AMS服务同样是经历SystemServiceManager启动的,那吾们最先望ActivityManagerService.Lifecycle的组织手段,然后在望它的Start函数;

Lifecycle的组织手段中很浅易就是组织一个AMS的对象

mService=newActivityManagerService;

创建AMS对象的时候必要传递一个Context行为参数,那这个mSystemContext是就是上面创建的编制Context;

接着望AMS的组织手段;

public ActivityManagerService; 
AMS的组织手段主要是在做一些初起化的先关操作; 保存了本身的运走环境的Context和ActivityThread; AMS负责调度四大组件,因此会初起化broadcast,service和contentProvider相关的变量,接着初起化了电量统计服务,创建了编制的第一个用户,初起化了基本的配相新闻,还创建了Activity调度的中央类,由于Activity调度比较复杂,Activity相关的新闻初起化会在ActivityStackSupervisor中; 3、start

AMS的start手段。

private void start;  } 
AMS的start手段很浅易,只是启动了几个服务,并把AMS服务本身保存到localService中供程序内部调用; AMS的组织手段和start手段中做了AMS服务一些变量的初起化和相关服务的初起化。接着望下一个主要的手段setSystemProcess; 4、setSystemProcess

ActivityManagerService的setSystemProcess手段

public void setSystemProcess;             } 
setSystemProcess手段中,最先将本身AMS服务注册到了ServiceManager中,然后又注册了权限服务等其他的编驯服务; 经历先前创建的Context,BOB体育首页得到PMS服务检索framework-res的Application新闻然后将它配置到编制的ActivityThread中; 为了能让AMS同样能够管理调度编制进程也创建了一个关于编制进程的ProcessRecord对象ProcessRecord对象保存一个进程的相关新闻; 然后将它保存到mPidsSelfLocked荟萃中方便管理; AMS详细是如何将检索到的framework-res的application新闻配置到ActivityThread中的必要不息分析ActivityThread的installSystemApplicationInfo手段;

接着望installSystemApplicationInfo手段

public void installSystemApplicationInfo;         }     } 

这个手段中最后调用上面创建的SystemContext的installSystemApplication手段那就接着望ConxtextImpl的installSystemApplication手段。

void installSystemApplicationInfo;     } 
它有最后调用了mPackageInfo的installSystemApplication手段mPackageInfo就是在创建Context对象的时候传进的LoadedApk内里保存了一个行使程序的基本新闻; setSystemProcess主要就是竖立编制集成的一些新闻在这边竖立了编制进程的Application新闻创建了编制进程的ProcessRecord对象将其保存在进程荟萃中方便AMS管理调度; 5、installSystemProvider ActivityManagerService的installSystemProvider手段; Android编制中有许多配相新闻都必要保存这些新闻是保存在SettingsProvider中而这个SettingsProvider也是运走在SystemServer进程中的由于SystemServer进程倚赖SettingsProvider放在一个进程中能够缩短进程间通信的效果亏损; 下面就分析下如何将SettingsProvider.apk也添载到SystemServer进程中;

public final void installSystemProviders;     } 

找到名称为system的进程对象就是SystemServer进程然后根据进程对象往查询一切相关的ContentProvider调用编制进程的主线程ActivityThread装配一切相关的ContentProvider详细是如何查找相关的contentProvider和如何装配ContentProvider到编制主线程的接着分析下面两个手段;

private final List<ProviderInfo> generateApplicationProvidersLocked;                 ……             }         }         return providers;     } 

这个手段就是从PMS中查询和SystemServer进程相关的Provider也就是SettingsProvder然后将它保存到AMS的contentProvider列外中; 同时也将它保存到编制进程对象ProcessRecord的变量pubProviders列外中保存到AMS的provider列外中是由于AMS必要管理一切的ContentProvder; 保存到进程对象的pubProviders列外中是由于每个ContentProvider都必要对答到一个进程中往; 接着望如何将SettingsProvider装配到编制的主进程中往;

private void installContentProviders;        ……     } 
该手段将得到的contentProvider对象封装成了contentProviderHolder对象其实就是Binder对象如许就能够进程间传输了然后跨进程调用AMS服务注册Provider; AMS负责管理ContentProvider只有将ContentProvider注册到AMS服务其他进程才能访问; 接着望AMS如何注册Provider; 6、publishContentProviders

public final void publishContentProviders;                     }                    ……                     } 
AMS的注册服务就是根据参数传过的provider新闻找到原先辈程中pubProviders列外中保存的ContentProviderRecord然后将它别离以类为key保存在mProviderMap中和以authority为key保存在mProviderMap中; 即AMS挑供了多栽方案查找一个ContentProvider一栽是经历authority查找一栽是指明CompomentName查找; 而今位置一个SettingsProvider就正式注册到SystemServer进程中了因此能够望出installSystemProvider手段的主要做事就是遵命清淡进程相通的手段将SettingsProvider注册到编制进程中方便编制进程对settings的配置数据进走调用; 7、systemReady

ActivityManagerService的systemReady手段

public void systemReady;            ……         }     } 

SystemReady手段也是比较长大致能够分为:

第一:在systemReady的时候初起化了deviceIdleController等对象 第二:移除并杀物化了那些不答在AMS之前启动的进程 第三:实走了参数传入的回调函数 第四:启动了Launcer界面 第五:启动那些persistent配置为1的进程; 再望些systemReady参数的回调函数做了什么做事.
try {                     //ams开起监听native层的crash新闻                     mActivityManagerService.startObservingNativeCrashes;                 } 

这个回调函数中主要做事就是启动systemUI并调用其他服务的systemReady手段SystemReady函数完善了编制停当的必要的做事启动了HomeActivity和SystemUI然后Android编制就通盘启动了;

总结

AMS服务启动主要分为几个步骤:

调用AMS的组织手段和start手段对AMS必要的内容进走初起化; 将函数AMS注册到ServiceManager中同时对systemServer进程也创建了一个ProcessRecord对象并竖立Context的appliation为framework-res的application对象; 将settingsProvider添载到编制进程systemServer中; 调用systemReady手段做一些启动前的停当做事并启动了HomeActivity和SystemUI;

本文转载自微信公多号「Android开发程」

Linux编制中成功恢复已删除的文件 别的程序员都有NFT了老铁你等啥呢? 网络坦然行家发现经微柔WHQL认证的FiveSys驱动实际上是款凶意程序 对比WiFi6与WiFi5就差在这三项 Windows11最强功能终于了安卓柔件真的能够搪塞下

BOB电竞平台 BOB体育首页 BOB综合体育在线