ActivityManagerService
概念:ActivityManagerService是android系统中非常重要的服务(AMS机制和WMS机制是android中最复杂的)
ams的作用是用来管理四大组件和内存进程调度的。
AMS机制中重要的类:
1.ProcessRecord: 表示一个进程信息,包括该进程里的Activity和service等信息
代码摘抄,省掉了很多。
activity启动,在ams机制中最终调用的方法:(ActivityStackSupervisor)
void startSpecificActivityLocked(ActivityRecord r, // 前面的知识,ActivityRecord在ams机制中代表一个activity
boolean andResume, boolean checkConfig) {
//判断activity的进程是否存在,ProcessRecord在ams机制中代表一个进程
ProcessRecord app = mService.getProcessRecordLocked(r.processName,
r.info.applicationInfo.uid, true);
//进程存在的情况
realStartActivityLocked(r, app, andResume, checkConfig);
//进程不存在的情况
mService.startProcessLocked(r.processName, r.info.applicationInfo, true, 0,
"activity", r.intent.getComponent(), false, false, true);
}
service启动,在ams机制中最终调用的方法:(ActiveServices)
private String bringUpServiceLocked(ServiceRecord r, int intentFlags, boolean execInFg, //前面的知识,ServiceRecord在ams机制中代表一个service
boolean whileRestarting, boolean permissionsReviewRequired)
throws TransactionTooLargeException {
//判断service的进程是否存在,ProcessRecord在ams机制中代表一个进程
ProcessRecord app = mAm.getProcessRecordLocked(procName, r.appInfo.uid, false);
//进程存在的情况
app.addPackage(r.appInfo.packageName, r.appInfo.versionCode, mAm.mProcessStats);
realStartServiceLocked(r, app, execInFg);
//进程不存在的情况
if ((app=mAm.startProcessLocked(procName, r.appInfo, true, intentFlags,
hostingType, r.name, false, isolated, false)) == null) {...
}
Broadcast启动,在ams机制中最终调用的方法:(BroadcastQueue)
final void processNextBroadcast(boolean fromMsg) {
//判断Broadcast的进程是否存在,ProcessRecord在ams机制中代表一个进程
ProcessRecord app = mService.getProcessRecordLocked(targetProcess,
info.activityInfo.applicationInfo.uid, false);
//进程存在的情况