`

android----ServiceManager

阅读更多

serviceManager


在c++层如何使用serviceManager


frameworks\base\services\camera\tests\CameraServiceTest,示例代码如下:


sp<ICameraService> getCameraService() {
//取得serviceManager
sp<IServiceManager> sm = defaultServiceManager();


ASSERT(sm != 0);
sp<IBinder> binder = sm->getService(String16("media.camera"));
ASSERT(binder != 0);
sp<ICameraService> cs = interface_cast<ICameraService>(binder);
ASSERT(cs != 0);
return cs;
}
\frameworks\base\services\java\com\android\server\am


在java层使用serviceManager
\frameworks\base\services\java\com\android\server\am\
AtcitiveyManagerService.java 示例代码:
public static void setSystemProcess() {
try {
//以下语句相当于上面c++层的,
//defaultServiceManager()->addService()


ActivityManagerService m = mSelf;
ServiceManager.addService("activity", m);



ServiceManager.addService("meminfo", new MemBinder(m));
if (MONITOR_CPU_USAGE) {
ServiceManager.addService("cpuinfo", new CpuBinder


(m));
}
ServiceManager.addService("activity.broadcasts", new


BroadcastsBinder(m));
ServiceManager.addService("activity.services", new


ServicesBinder(m));
ServiceManager.addService("activity.senders",new


SendersBinder(m));
ServiceManager.addService("activity.providers",
new ProvidersBinder(m));
ServiceManager.addService("permission",
new PermissionController(m));
ApplicationInfo info =
mSelf.mContext.getPackageManager


().getApplicationInfo(
"android",
PackageManager.GET_SHARED_LIBRARY_FILES);
synchronized (mSelf) {
ProcessRecord app = mSelf.newProcessRecordLocked(
mSystemThread.getApplicationThread(),


info,
info.processName);
app.persistent = true;
app.pid = Process.myPid();
app.maxAdj = SYSTEM_ADJ;
mSelf.mProcessNames.put(app.processName,


app.info.uid, app);
synchronized (mSelf.mPidsSelfLocked) {
mSelf.mPidsSelfLocked.put(app.pid, app);
}
mSelf.updateLRUListLocked(app, true);
}
} catch (PackageManager.NameNotFoundException e) {
throw new RuntimeException("Unable to find android system


package", e);
}
}






serviceManager 在c++层


\frameworks\base\libs\binder
IServiceManager.cpp文件部分代码如下:

sp<IServiceManager> defaultServiceManager()
{
if (gDefaultServiceManager != NULL) return gDefaultServiceManager;

{
AutoMutex _l(gDefaultServiceManagerLock);
if (gDefaultServiceManager == NULL) {
gDefaultServiceManager = interface_cast<IServiceManager>(
//产生一个bpServicManager对象,提代iServiceManager接口,让


defaultServiceManager来回调这个接口
ProcessState::self()->getContextObject(NULL));
}
}

return gDefaultServiceManager;
}


serviceManager 在 java层
\frameworks\base\core\java\android\os
public final class ServiceManager {
.....
private static IServiceManager getIServiceManager() {
if (sServiceManager != null) {
return sServiceManager;
}
// Find the service manager
//产生一个serviceManagerProxy,提供IServiceManager接口,


getiServiceManager回调IServiceManager接口
sServiceManager = ServiceManagerNative.asInterface


(BinderInternal.getContextObject());
return sServiceManager;
}


public static IBinder getService(String name) {
try {
IBinder service = sCache.get(name);
if (service != null) {
return service;
} else {
//调用底层serviceManager
return getIServiceManager().getService(name);
}
} catch (RemoteException e) {
Log.e(TAG, "error in getService", e); }
return null;
}


public static void addService(String name, IBinder service) {
try {
//调用底层serviceManager
getIServiceManager().addService(name, service);
} catch (RemoteException e) {
Log.e(TAG, "error in addService", e);
}
}






.....
}

分享到:
评论

相关推荐

    Android代码-Android-ServiceManager

    Android-ServiceManager 简化android跨进程调用,无需aidl、service、messenger等,只需定义任意接口,并实现接口即可。 利用此框架可以轻松实现跨进程调用。 使用方法: 1、项目中引入libray工程, 另请关注libray...

    Android-start-boot-analyze-.rar_android_android bootloader_andro

    &#8226 init进程启动servicemanager---随后详细分析其过程 &#8226 init进程启动zygote ---随后详细分析其过程 &#8226 JAVA部分的Service启动 &#8226 init进程启动mediaserver---多媒体本地服务启动 本文主要分析...

    Android服务管家(ServiceManager)介绍

    ### Android服务管家(ServiceManager)详解 #### 一、引言 在Android系统中,`ServiceManager`扮演着至关重要的角色,它是系统所有服务的管理器,负责服务的启动、停止及客户端查询等功能。本文将从代码层面深入...

    Android-framework详解

    ### Android Framework 层面的核心技术解析 #### 一、引言与设计意图 在深入了解Android框架之前,我们首先需要理解其设计背后的核心理念。本文档旨在揭示Android框架的设计初衷及其实现方式,帮助读者从宏观角度...

    Android-framework详细分析[1]

    此外,ServiceManager是管理和发现服务的重要组件。 #### 五、Service深入分析 Service是Android框架中的一个重要组件,它可以运行在后台执行长时间运行的任务,如音乐播放等。深入理解Service的工作原理对于开发...

    認識Android的ServiceManager.pdf

    ### 认识Android的核心服务:ServiceManager #### 一、ServiceManager模块介绍 ServiceManager作为Android平台中的一个基础模块,在Android系统启动时会被注册到Binder Kernel中,成为第一个可以提供远程服务的...

    android 核心分析之------Android 启动过程详解

    例如,`servicemanager`负责管理系统的各种服务,而`zygote`则是构建Android运行环境的关键进程。 #### 第二步:Native服务启动 Native服务启动主要指的是`zygote`进程的启动。`zygote`进程是Android的核心,它的...

    serviceManager,简单的android实用程序,帮助将后台服务用作作业,而无需进行硬更改。与Android O兼容。.zip

    在serviceManager-master压缩包中,主要包含以下内容: - `README.md`:项目的基本介绍、使用方法、贡献指南等。 - `build.gradle`:项目的构建配置文件,用于Gradle构建系统。 - `src/main/java`:源代码目录,...

    Android调用隐藏系统服务锁屏

    要调用隐藏服务,如`KeyguardService`,需要创建一个`IBinder`接口,并使用`ServiceManager`来查找并连接到服务。由于`KeyguardService`是隐藏的,所以通常需要反射或者AOSP源码级别的访问权限。 2. **权限管理**:...

    E04_HAL觀點_ServiceManager和IBinder扮演的角色_android.doc

    在Android系统中,ServiceManager和IBinder是两个至关重要的组件,它们在系统服务管理和进程间通信(IPC)中起着核心作用。以下是这两个组件的详细解释: 1. **ServiceManager的角色**: - ServiceManager是一个...

    認識Android的ServiceManager.doc

    在Java层,Android提供了`ServiceManager`类,它封装了对底层ServiceManager的访问。开发者可以使用这个类提供的方法来添加、查找或获取系统服务。例如,在`ActivityManagerService.java`中,多个服务如`Activity...

    Android-system-boot-analyze-.rar_android开发_Java_

    如:adbd、vold、netd、等&#8226 init进程启动servicemanager---随后详细分析其过程&#8226 init进程启动zygote ---随后详细分析其过程&#8226 JAVA部分的Service启动&#8226 init进程启动mediaserver---多媒体本地服务...

    Android系统-源码阅读-系统启动流程笔记

    - **Flow**:在`service_manager.c`中,ServiceManager的主要任务是注册和管理Android系统服务,而`main_runtime.cpp`则涉及SystemServer的运行时行为。 4. **ADBD**: - ADBD是Android Debug Bridge的守护进程,...

    android核心分析之------Android启动过程详解.pdf

    Android启动过程详解主要分为四个关键步骤,这四个步骤构建了Android系统的基石。下面将详细阐述这些步骤以及涉及的重要组件。 第一步:初始化init进程 init进程是Android系统启动的第一个用户级进程,由Linux内核...

    android-native-service-demo

    #Native Service Demo 直接使用libhardware的Native Service,这个demo需要system权限或者更高权限。 关于如何使用一些Android SDK 中不存在的隐藏API,比如ServiceManager类。 你可以参考我 blogspot 的帖子:

    android 系统隐藏类直接调用包ServiceManager StatusBarManager

    android 系统隐藏类 直接调用包 ServiceManager和StatusBarManager,主要用来屏蔽通知栏下拉。

    Android中Binder处理流程

    下面我们将深入探讨Android中Binder处理流程以及ServiceManager处理流程。 ### Binder处理流程 1. **客户端发起请求**: - 客户端(如Activity或Service)通过AIDL(Android Interface Definition Language)定义...

Global site tag (gtag.js) - Google Analytics