- 浏览: 261376 次
- 性别:
- 来自: 济南
文章分类
- 全部博客 (303)
- c (31)
- c++ (16)
- java (18)
- c# (1)
- python (3)
- java web (6)
- oracle (7)
- sqlserver (2)
- mysql (2)
- android (24)
- android系统 (15)
- android多媒体部分 (15)
- android游戏 (12)
- linux (26)
- javaScript (1)
- ajax (1)
- node JS (2)
- html (5)
- apache (3)
- jboss (1)
- weblogic (0)
- 通信协议 (10)
- 云计算 (1)
- 分布式 (5)
- ejb (1)
- webservice (5)
- 设计模式 (16)
- JNI (6)
- swing (13)
- 版本控制 (1)
- UML (1)
- xml (4)
- spring (5)
- hibernate (5)
- struts1 (3)
- struts2 (4)
- ibatis (0)
- tomcat (2)
- 心得体会 (1)
- css (1)
- 嵌入式 (41)
- arm体系结构 (10)
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系统学习笔记一
2012-09-03 15:01 9081.android的系统架构(linux2.6内核) Lin ... -
android系统学习笔记二
2012-09-03 15:03 914android的linux内核和驱动程序 Androidr专 ... -
android系统学习笔记三
2012-09-03 15:05 840第四章android的底层库和程序 知识点: And ... -
android系统学习笔记四
2012-09-03 15:07 1134Android的GUI系统 AndroidGUI系统综 ... -
android系统学习笔记五
2012-09-03 15:12 2201android中的audio系统 Audo系统主要分如下几 ... -
android系统学习笔记六
2012-09-03 15:16 2221android的多媒体系统 ... -
android系统学习笔记七
2012-09-03 15:18 740Android电话部分综述 主 ... -
android系统学习八
2012-09-03 15:19 755Android的联接部分 Wifi部分 Wif ... -
android系统学习笔记九
2012-09-03 15:21 738蓝牙部分 蓝牙协议栈1.11.22.02.13.0 异步数 ... -
android系统学习笔记十一
2012-09-03 15:22 1503Gps(globalPositionSystem全球定位系统) ... -
android系统学习笔记十二
2012-09-03 15:23 1019Android的传感器系统 ... -
Android编译系统详解(一)
2012-09-10 13:45 829+++++++++++++++++++++++++++++ ... -
android 自定义核心服务
2012-09-18 23:27 798native service zygote 服务 kern ... -
android系统移植学习笔记一
2012-09-21 16:08 629系统框架 applicationjava应用程序 ...
相关推荐
Android-ServiceManager 简化android跨进程调用,无需aidl、service、messenger等,只需定义任意接口,并实现接口即可。 利用此框架可以轻松实现跨进程调用。 使用方法: 1、项目中引入libray工程, 另请关注libray...
• init进程启动servicemanager---随后详细分析其过程 • init进程启动zygote ---随后详细分析其过程 • JAVA部分的Service启动 • init进程启动mediaserver---多媒体本地服务启动 本文主要分析...
### Android服务管家(ServiceManager)详解 #### 一、引言 在Android系统中,`ServiceManager`扮演着至关重要的角色,它是系统所有服务的管理器,负责服务的启动、停止及客户端查询等功能。本文将从代码层面深入...
### Android Framework 层面的核心技术解析 #### 一、引言与设计意图 在深入了解Android框架之前,我们首先需要理解其设计背后的核心理念。本文档旨在揭示Android框架的设计初衷及其实现方式,帮助读者从宏观角度...
此外,ServiceManager是管理和发现服务的重要组件。 #### 五、Service深入分析 Service是Android框架中的一个重要组件,它可以运行在后台执行长时间运行的任务,如音乐播放等。深入理解Service的工作原理对于开发...
### 认识Android的核心服务:ServiceManager #### 一、ServiceManager模块介绍 ServiceManager作为Android平台中的一个基础模块,在Android系统启动时会被注册到Binder Kernel中,成为第一个可以提供远程服务的...
例如,`servicemanager`负责管理系统的各种服务,而`zygote`则是构建Android运行环境的关键进程。 #### 第二步:Native服务启动 Native服务启动主要指的是`zygote`进程的启动。`zygote`进程是Android的核心,它的...
在serviceManager-master压缩包中,主要包含以下内容: - `README.md`:项目的基本介绍、使用方法、贡献指南等。 - `build.gradle`:项目的构建配置文件,用于Gradle构建系统。 - `src/main/java`:源代码目录,...
要调用隐藏服务,如`KeyguardService`,需要创建一个`IBinder`接口,并使用`ServiceManager`来查找并连接到服务。由于`KeyguardService`是隐藏的,所以通常需要反射或者AOSP源码级别的访问权限。 2. **权限管理**:...
在Android系统中,ServiceManager和IBinder是两个至关重要的组件,它们在系统服务管理和进程间通信(IPC)中起着核心作用。以下是这两个组件的详细解释: 1. **ServiceManager的角色**: - ServiceManager是一个...
在Java层,Android提供了`ServiceManager`类,它封装了对底层ServiceManager的访问。开发者可以使用这个类提供的方法来添加、查找或获取系统服务。例如,在`ActivityManagerService.java`中,多个服务如`Activity...
如:adbd、vold、netd、等• init进程启动servicemanager---随后详细分析其过程• init进程启动zygote ---随后详细分析其过程• JAVA部分的Service启动• init进程启动mediaserver---多媒体本地服务...
- **Flow**:在`service_manager.c`中,ServiceManager的主要任务是注册和管理Android系统服务,而`main_runtime.cpp`则涉及SystemServer的运行时行为。 4. **ADBD**: - ADBD是Android Debug Bridge的守护进程,...
Android启动过程详解主要分为四个关键步骤,这四个步骤构建了Android系统的基石。下面将详细阐述这些步骤以及涉及的重要组件。 第一步:初始化init进程 init进程是Android系统启动的第一个用户级进程,由Linux内核...
#Native Service Demo 直接使用libhardware的Native Service,这个demo需要system权限或者更高权限。 关于如何使用一些Android SDK 中不存在的隐藏API,比如ServiceManager类。 你可以参考我 blogspot 的帖子:
android 系统隐藏类 直接调用包 ServiceManager和StatusBarManager,主要用来屏蔽通知栏下拉。
下面我们将深入探讨Android中Binder处理流程以及ServiceManager处理流程。 ### Binder处理流程 1. **客户端发起请求**: - 客户端(如Activity或Service)通过AIDL(Android Interface Definition Language)定义...