ServiceManager.java

本文介绍了Android系统中ServiceManager的核心功能,包括保存所有服务的Binder引用并提供服务的添加与查询接口。展示了ServiceManager在SystemServer启动过程中如何注册关键服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

位置: frameworks/base/core/java/android/os/ServiceManager.java

介绍:framework 核心类,保存所有service的 binder引用,提供service添加和查询接口。

主要接口:

public static void addService(String name, IBinder service) {
        try {
            getIServiceManager().addService(name, service, false);
        } catch (RemoteException e) {
            Log.e(TAG, "error in addService", e);
        }
    }
public static IBinder getService(String name) {
        try {
            IBinder service = sCache.get(name);
            if (service != null) {
                return service;
            } else {
                return getIServiceManager().getService(name);
            }
        } catch (RemoteException e) {
            Log.e(TAG, "error in getService", e);
        }
        return null;
    }



主要使用地方:

1. framework/base/services/java/com/android/server/SystemServer.java


private void startOtherServices() {

...

ServiceManager.addService("scheduling_policy", new SchedulingPolicyService());

ServiceManager.addService("telephony.registry", telephonyRegistry);

ServiceManager.addService("vibrator", vibrator);

ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr);

ServiceManager.addService(Context.WINDOW_SERVICE, wm);
ServiceManager.addService(Context.INPUT_SERVICE, inputManager);

ServiceManager.addService(Context.ACCESSIBILITY_SERVICE,
                        new AccessibilityManagerService(context));

ServiceManager.addService(Context.STATUS_BAR_SERVICE, statusBar);

ServiceManager.addService(Context.CLIPBOARD_SERVICE,
                            new ClipboardService(context));

ServiceManager.addService(Context.NETWORKMANAGEMENT_SERVICE, networkManagement);

ServiceManager.addService(Context.NETWORK_SCORE_SERVICE, networkScore);

ServiceManager.addService(Context.NETWORK_STATS_SERVICE, networkStats);

ServiceManager.addService(Context.NETWORK_POLICY_SERVICE, networkPolicy);

ServiceManager.addService(Context.CONNECTIVITY_SERVICE, connectivity);

ServiceManager.addService(
                            Context.NSD_SERVICE, serviceDiscovery);

ServiceManager.addService(Context.UPDATE_LOCK_SERVICE,
                            new UpdateLockService(context));

ServiceManager.addService(Context.LOCATION_SERVICE, location);

ServiceManager.addService(Context.COUNTRY_DETECTOR, countryDetector);

ServiceManager.addService(Context.SEARCH_ENGINE_SERVICE,
                                new SearchEngineManagerService(context));

ServiceManager.addService(ISensorHubManager.SENSORHUB_SERVICE,
                            new SensorHubService(context));

ServiceManager.addService(Context.SERIAL_SERVICE, serial);

ServiceManager.addService(Context.HARDWARE_PROPERTIES_SERVICE,
                            hardwarePropertiesService);

ServiceManager.addService("diskstats", new DiskStatsService(context));

ServiceManager.addService("samplingprofiler",
                                new SamplingProfilerService(context));

ServiceManager.addService("network_time_update_service", networkTimeUpdater);

ServiceManager.addService("commontime_management", commonTimeMgmtService);

ServiceManager.addService(AssetAtlasService.ASSET_ATLAS_SERVICE, atlas);

ServiceManager.addService(GraphicsStatsService.GRAPHICS_STATS_SERVICE,
                        new GraphicsStatsService(context));

ServiceManager.addService(Context.MEDIA_ROUTER_SERVICE, mediaRouter);

...

}

private void startBootstrapServices() {

...

// Start the package manager.
        traceBeginAndSlog("StartPackageManagerService");
        mPackageManagerService = PackageManagerService.main(mSystemContext, installer,
                mFactoryTestMode != FactoryTest.FACTORY_TEST_OFF, mOnlyCore);
        mFirstBoot = mPackageManagerService.isFirstBoot();

// Set up the Application instance for the system process and get started.

...
    mActivityManagerService.setSystemProcess();

...

}

...

2. frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java

public void setSystemProcess() {
        try {
            ServiceManager.addService(Context.ACTIVITY_SERVICE, this, true);
            ServiceManager.addService(ProcessStats.SERVICE_NAME, mProcessStats);
            ServiceManager.addService("meminfo", new MemBinder(this));
            ServiceManager.addService("gfxinfo", new GraphicsBinder(this));
            ServiceManager.addService("dbinfo", new DbBinder(this));
            if (MONITOR_CPU_USAGE) {
                ServiceManager.addService("cpuinfo", new CpuBinder(this));
            }
            ServiceManager.addService("permission", new PermissionController(this));
            ServiceManager.addService("processinfo", new ProcessInfoService(this));

            /// M: ANRManager mechanism @{
            ServiceManager.addService("anrmanager", mANRManager, true);
            /// @}
........
}
3. frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
public static PackageManagerService main(Context context, Installer installer,
            boolean factoryTest, boolean onlyCore) {
        // Self-check for initial settings.
        PackageManagerServiceCompilerMapping.checkProperties();

        PackageManagerService m = new PackageManagerService(context, installer,
                factoryTest, onlyCore);
        m.enableSystemUserPackages();
        ServiceManager.addService("package", m);
        return m;
    }








JDK annotations not found Details: Paths checked: D:/android-studio/android-studio/plugins/java/lib/jdkAnnotations.jar; exists: true; siblings: [aether-api-1.1.0.jar, aether-connector-basic-1.1.0.jar, aether-dependency-resolver.jar, aether-impl-1.1.0.jar, aether-spi-1.1.0.jar, aether-transport-file-1.1.0.jar, aether-transport-http-1.1.0.jar, aether-util-1.1.0.jar, commons-lang3-3.4.jar, debugger-memory-agent-0.0.11.jar, ecj-4.10.jar, java-api.jar, java-impl.jar, javac2.jar, java_resources_en.jar, jdkAnnotations.jar, jgoodies-common-1.4.0.jar, jps-builders-6.jar, jps-builders.jar, jps-launcher.jar, jshell-protocol.jar, maven-aether-provider-3.3.9.jar, maven-artifact-3.3.9.jar, maven-builder-support-3.3.9.jar, maven-model-3.3.9.jar, maven-model-builder-3.3.9.jar, maven-repository-metadata-3.3.9.jar, plexus-component-annotations-1.6.jar, plexus-interpolation-1.21.jar, plexus-utils-3.0.22.jar, resources.jar, resources_en.jar, rt, wadl-core.jar] jar://D:/android-studio/android-studio/lib/jdkAnnotations.jar!/; exists: false; siblings: null D:/android-studio/android-studio/java/jdkAnnotations; exists: false; siblings: null com.intellij.openapi.diagnostic.Logger$EmptyThrowable at com.intellij.openapi.diagnostic.Logger.error(Logger.java:169) at com.intellij.openapi.projectRoots.impl.JavaSdkImpl.attachIDEAAnnotationsToJdk(JavaSdkImpl.java:279) at com.intellij.openapi.projectRoots.impl.JavaSdkImpl.attachJdkAnnotations(JavaSdkImpl.java:265) at com.intellij.openapi.projectRoots.impl.JavaSdkImpl.createJdk(JavaSdkImpl.java:369) at com.intellij.openapi.projectRoots.JavaSdk.createJdk(JavaSdk.java:21) at com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl.getInternalJdk(JavaAwareProjectJdkTableImpl.java:34) at com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl.loadState(JavaAwareProjectJdkTableImpl.java:60) at com.intellij.openapi.projectRoots.impl.JavaAwareProjectJdkTableImpl.loadState(JavaAwareProjectJdkTableImpl.java:17) at com.intellij.configurationStore.ComponentStoreImpl.doInitComponent(ComponentStoreImpl.kt:405) at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:355) at com.intellij.configurationStore.ComponentStoreImpl.initPersistenceStateComponent(ComponentStoreImpl.kt:122) at com.intellij.configurationStore.ComponentStoreImpl.initComponent(ComponentStoreImpl.kt:97) at com.intellij.configurationStore.ComponentStoreWithExtraComponents.initComponent(ComponentStoreWithExtraComponents.kt:49) at com.intellij.openapi.components.impl.PlatformComponentManagerImpl.initializeComponent(PlatformComponentManagerImpl.java:44) at com.intellij.openapi.components.impl.ServiceManagerImpl$MyComponentAdapter.createAndInitialize(ServiceManagerImpl.java:248) at com.intellij.openapi.components.impl.ServiceManagerImpl$MyComponentAdapter.lambda$getComponentInstance$0(ServiceManagerImpl.java:232) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:591) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:537) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:59) at com.intellij.openapi.progress.impl.CoreProgressManager.executeNonCancelableSection(CoreProgressManager.java:197) at com.intellij.openapi.components.impl.ServiceManagerImpl$MyComponentAdapter.getComponentInstance(ServiceManagerImpl.java:231) at com.intellij.util.pico.DefaultPicoContainer.getLocalInstance(DefaultPicoContainer.java:246) at com.intellij.util.pico.DefaultPicoContainer.getComponentInstance(DefaultPicoContainer.java:213) at com.intellij.openapi.components.ServiceManager.doGetService(ServiceManager.java:75) at com.intellij.openapi.components.ServiceManager.getService(ServiceManager.java:44) at com.intellij.openapi.projectRoots.ProjectJdkTable.getInstance(ProjectJdkTable.java:20) at com.android.tools.idea.sdk.AndroidSdks.getAllAndroidSdks(AndroidSdks.java:249) at com.android.tools.idea.sdk.IdeSdks.getEligibleAndroidSdks(IdeSdks.java:895) at com.android.tools.idea.sdk.IdeSdks.getFirstAndroidSdk(IdeSdks.java:393) at com.android.tools.idea.sdk.IdeSdks.getAndroidSdkPath(IdeSdks.java:129) at com.android.tools.idea.startup.AndroidSdkInitializer.run(AndroidSdkInitializer.java:80) at com.android.tools.idea.AndroidInitialConfigurator.activateAndroidStudioInitializerExtensions(AndroidInitialConfigurator.java:201) at com.android.tools.idea.AndroidInitialConfigurator.<init>(AndroidInitialConfigurator.java:71) at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.lang.reflect.Constructor.newInstance(Constructor.java:423) at org.picocontainer.defaults.InstantiatingComponentAdapter.newInstance(InstantiatingComponentAdapter.java:193) at com.intellij.util.pico.CachingConstructorInjectionComponentAdapter.doGetComponentInstance(CachingConstructorInjectionComponentAdapter.java:88) at com.intellij.util.pico.CachingConstructorInjectionComponentAdapter.instantiateGuarded(CachingConstructorInjectionComponentAdapter.java:66) at com.intellij.util.pico.CachingConstructorInjectionComponentAdapter.getComponentInstance(CachingConstructorInjectionComponentAdapter.java:48) at com.intellij.openapi.components.impl.ComponentManagerImpl$ComponentConfigComponentAdapter.getComponentInstance(ComponentManagerImpl.java:481) at com.intellij.openapi.components.impl.ComponentManagerImpl.createComponents(ComponentManagerImpl.java:126) at com.intellij.openapi.application.impl.ApplicationImpl.lambda$load$7(ApplicationImpl.java:414) at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:169) at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:591) at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:537) at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:59) at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:156) at com.intellij.openapi.application.impl.ApplicationImpl.load(ApplicationImpl.java:414) at com.intellij.idea.IdeaApplication.lambda$executeInitAppInEdt$5(IdeaApplication.java:153) at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:764) at java.awt.EventQueue.access$500(EventQueue.java:98) at java.awt.EventQueue$3.run(EventQueue.java:715) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:74) at java.awt.EventQueue.dispatchEvent(EventQueue.java:734) at com.intellij.ide.IdeEventQueue.dispatchEvent(IdeEventQueue.java:438) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82) 分析分享
06-20
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值