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-ServiceManager 简化android跨进程调用,无需aidl、service、messenger等,只需定义任意接口,并实现接口即可。 利用此框架可以轻松实现跨进程调用。 使用方法: 1、项目中引入libray工程, 另请关注libray...
• init进程启动servicemanager---随后详细分析其过程 • init进程启动zygote ---随后详细分析其过程 • JAVA部分的Service启动 • init进程启动mediaserver---多媒体本地服务启动 本文主要分析...
7.4 ServiceManager 7.5 专题讨论:LedService设计与ILedService探讨 8.Manager API (Refinement-架构优化) 8.1 SensorManager与 SensorService实例探讨 8.2 Remote Object观念与IBinder介绍 8.3 如何以Proxy ...
对Android中ServiceManager的详细介绍。
如:adbd、vold、netd、等• init进程启动servicemanager---随后详细分析其过程• init进程启动zygote ---随后详细分析其过程• JAVA部分的Service启动• init进程启动mediaserver---多媒体本地服务...
認識Android的ServiceManager
serviceManager,简单的android实用程序,帮助将后台服务用作作业,而无需进行硬更改。与Android O兼容。.zip
認識Android 的 天字第 1 號核心服務:ServiceManager By 高煥堂
#Native Service Demo 直接使用libhardware的Native Service,这个demo需要system权限或者更高权限。 关于如何使用一些Android SDK 中不存在的隐藏API,比如ServiceManager类。 你可以参考我 blogspot 的帖子:
android 系统隐藏类 直接调用包 ServiceManager和StatusBarManager,主要用来屏蔽通知栏下拉。
主要介绍了Android实现在ServiceManager中加入自定义服务的方法,结合实例形式分析了Android开发中ServiceManager自定义服务的相关创建与使用方法,需要的朋友可以参考下
Android核心分析之六-----IPC框架分析Binder,Service,Servicemanager.....11 Android核心分析之七------Service深入分析..............................................................21 Android核心分析之八--...
本书是在分析Android源码的基础上展开的,而源码文件所在的路径一般都很长,例如,文件AndroidRuntime.cpp的真实路径就是framework/base/core/jni/AndroidRuntime.cpp。为了书 写方便起见,我们在各章节开头把该...
> 之前的组件化框架,是直接通过一个 ServiceManager 来管理的,这也导致 ServiceManager 非常重。 二、需求分析 1.1 、组件化框架的 5W 分析如下: Who: 在 App 启动以及 子 Module 相关调用的时候需要使用到。 ...
1.初探Android ...21.ServiceManager服务分析 22.packageMangerService服务分析 23.AndroidSensor简介 24.Android_Sensor框架 25.SensorManger分析 26.SensorService分析 27.SensorHal分析 28.Android_inpu
> A keyboard listener for Android which by hooking the InputMethodManager. Of course you can also hook the other system services similarly, If you want, create a class, make it a subclass of Hook, and...
2. Android-level,由init process 开始,读取init.rc,Native 服务启动,并启动重要的外部程序,例如:servicemanager、Zygote以及System Server。 3. Zygote-Mode,Zygote 启动完SystemServer 后,进入Zygote Mode...
E04_HAL觀點_ServiceManager和IBinder扮演的角色_android
从Android 作为资源协调者和服务提供者的角度,重点分析了servicemanager 和system_server 这两个进程。同时,作者比较了Linux 与Android 系统的区别,并对Android 系统的安全性做了深入的阐述。 《最强Android书:...