ActivityManagerService 시작 프로세스 간략 분석
4133 단어 Framework
1. SystemServer.java
frameworks/base/services/java/com/android/server/SystemServer.java
/**
* The main entry point from zygote.
*/
public static void main(String[] args) {
new SystemServer().run();
}
1. 런 방법
private void run() {
try {
...
// Initialize the system context.
createSystemContext();
// , SystemService
mSystemServiceManager = new SystemServiceManager(mSystemContext);
// 。
LocalServices.addService(SystemServiceManager.class, mSystemServiceManager);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
}
// Start services.
try {
Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, "StartServices");
startBootstrapServices(); //
startCoreServices(); //
startOtherServices(); //
} catch (Throwable ex) {
Slog.e("System", "******************************************");
Slog.e("System", "************ Failure starting system services", ex);
throw ex;
} finally {
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
}
...
}
Activity Manager Service는 부트 서비스에 속하며 다음 startBootstrap Services() 방법을 보겠습니다.
2、startBootstrapServices()
이 방법에는 주로 Activity Manager Service, PowerManager Service, Lights Service, Display Manager Service 등 서비스가 켜져 있다. Activity Manager Service는 다른 서비스와 달리 System Service를 직접 계승한다. Activity Manager Service에는 내부 클래스인 Lifecycle가 정의되어 있는데 이 클래스는 System Service를 계승한다.SystemService Manager는 Lifecycle을 통해 Activity Manager Service를 엽니다.관련 코드는 다음과 같습니다.
private void startBootstrapServices() {
Installer installer = mSystemServiceManager.startService(Installer.class);
...
mActivityManagerService = mSystemServiceManager.startService(
ActivityManagerService.Lifecycle.class).getService();
mActivityManagerService.setSystemServiceManager(mSystemServiceManager);
mActivityManagerService.setInstaller(installer);
...
}
3、SystemServiceManager.startService(Class serviceClass)
frameworks/base/services/core/java/com/android/server/SystemServiceManager.java
반사 메커니즘을 통해 서비스 대상을 얻고 서비스에 대응하는 start 방법을 호출합니다.
public T startService(Class serviceClass) {
try {
final String name = serviceClass.getName();
....
final T service;
try {
Constructor constructor = serviceClass.getConstructor(Context.class);
service = constructor.newInstance(mContext);
} catch (InstantiationException ex) {
...
}
// Register it.
mServices.add(service);
// Start it.
try {
service.onStart();
} catch (RuntimeException ex) {
...
}
}
4、Lifecycle.start()
SystemService Manager는 start Service를 통해Activity Manager 서비스의 내부 클래스인 Lifecycle 대상을 가져오고,Lifecycle을 통해Activity Manager 서비스 대상을 열고 가져오면Activity Manager 서비스가 만들어지고 켜집니다.
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
public static final class Lifecycle extends SystemService {
private final ActivityManagerService mService;
public Lifecycle(Context context) {
super(context);
/// M: Add BootEvent for profiling
BootEvent.setEnabled(true);
mService = new ActivityManagerService(context);
}
@Override
public void onStart() {
mService.start(); // ActivityManagerService
}
public ActivityManagerService getService() {
return mService;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Django] Django(4)View 베이스 함수 뷰Django의 보기는 호출 가능한 대상이기 때문에 두 가지 방식이 있습니다. Python 함수를 통해 이루어진 함수 보기와 Python 클래스를 통해 이루어진 클래스 보기입니다.보기를 통해 사용자는 웹 요청을 받아들...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.