ServiceManager启动
源码:frameworks\base\cmds\servicemanager\Service_manager.c
int main(int argc, char **argv)
{
struct binder_state *bs;
void *svcmgr = BINDER_SERVICE_MANAGER; //以此标识服务管理器
bs = binder_open(128*1024); //打开Binder驱动,在kernel/Common/Drivers/misc/binder.c中
if (binder_become_context_manager(bs)) { //在kernel/Common/Drivers/misc/binder.c中进行处理,将bs变成内容管理者
LOGE("cannot become context manager (%s)\n", strerror(errno));
return -1;
}
svcmgr_handle = svcmgr;
binder_loop(bs, svcmgr_handler); //进入循环等待数据的到来
return 0;
}
Binder驱动中采用RB树的方式进行存储管理,采用linux的ioctl机制进行与用户程序进行交互。ServiceManager作为守护进程,使用链表保存了注册进来的其他Service,在其他服务的请求到来时,将请求通过ioctl写入驱动,将驱动和响应读出来再传递给发起请求的服务。
Binder库
利用Binder驱动实现IPC通信
源码:frameworks/base/include/utils/*
frameworks/base/libs/utils/*
主要的类为:
RefBase.h :
引用计数,定义类RefBase。
Parcel.h :
为在IPC中传输的数据定义容器,定义类Parcel
IBinder.h:
Binder对象的抽象接口, 定义类IBinder
Binder.h:
Binder对象的基本功能, 定义类BBinder和BpRefBase,BBinder类用于服务器端Binder,即远端Binder
BpBinder.h:
BpBinder的功能,定义类BpBinder,用于客户端Binder
IInterface.h:
为抽象经过Binder的接口定义通用类,
定义类IInterface,类模板BnInterface,类模板BpInterface
ProcessState.h
表示进程状态的类,定义类ProcessState
IPCThreadState.h
表示IPC线程的状态,定义类IPCThreadState
IPC流程
守护进程ServiceManager负责周转各进程间的数据交互服务。
进程A通过IServiceManager::getService函数取得IBinder,在此IBinder上调用Transaction进行数据传输。此IBinder会利用IPCThreadState对象通过与Binder驱动对话,将请求交由KERNEL中的驱动处理。
Binder驱动采用同步的方式将数据传递给远端Binder对象,远端Binder对象进行数据处理,将处理结果原路写回,藉由驱动再传递回IBinder。见示意图说明。
Service的实现方法
假设要实现一个TestService,可按如下方法操作:
1. 定义ITestService.h文件,定义ITestService接口并从IInterface类继承,在其中使用DECLARE_META_INTERFACE(TestService)宏
2. 定义ITestService.cpp文件,在其中使用IMPLEMENT_META_INTERFACE(TestService, "android.my.ITestService")
3. 实现BnTestService类,实现onTransact函数
4. 如果需要,则实现BpTestService类
5. 在TestService启动时利用IServiceManager::addService将自己注册到服务管理器
6. 使用此服务时只需使用IServiceManager::getService函数取到ITestService接口即可
——欢迎转载,转载请注明出处,谢谢——
分享到:
相关推荐
《深入剖析Android Chromium浏览器源码》 Android Chromium是一款开源的浏览器项目,它是Google Chrome浏览器在Android平台上的核心组件。此源码提供了深入了解Android应用程序开发、Web浏览技术以及Chrome浏览器...
首先,Android源码的学习通常涵盖以下几个主要部分: 1. **Android系统架构**:Android系统分为用户空间(User Space)和内核空间(Kernel Space),包括Linux内核、HAL(硬件抽象层)、System Server、应用程序...
在Android平台上,IPC(Inter-Process Communication)是不同应用程序之间进行通信的重要机制。它允许不同进程之间共享数据、服务和执行跨进程操作。本资源主要提供了Android IPC客户端的源码,这对于开发者深入理解...
【Android应用源码之MessageManager】是一个典型的Android项目,它主要展示了如何在移动开发环境中实现消息管理机制。这个Demo是针对计算机科学与技术专业学生的毕业设计,旨在帮助他们理解和掌握Android应用开发的...
本资源"Android源码——快捷查询源码.zip"包含的是一个帮助开发者快速查询Android源码的工具或指南,旨在提高开发效率,深入理解Android系统的运行机制。以下是基于这个主题的详细知识点: 1. **Android源码结构**...
通过学习和理解这个"Android-Pc-Socket-Connection"源码,开发者可以掌握Android与PC间的网络通信技术,为构建更复杂的跨平台应用程序打下基础。实践中,你可能会遇到网络延迟、数据解析、并发处理等问题,这些都是...
Android源码是一个庞大的开源项目,包含了操作系统、中间件层、应用程序框架以及丰富的API库,是开发者深入了解Android系统工作原理和定制化...然而,由于Android源码的复杂性,学习和掌握它需要耐心和深入的编程知识。
在"android_ipc_0430"这个压缩包文件中,可能包含了相关的代码示例、讲解文档或者项目源码,可以帮助读者更深入地理解和实践Android IPC通信。通过学习这些实例,开发者能够熟练掌握各种IPC机制,并能根据实际需求...
### Android源码解析知识点概述 #### 公共技术点概览 - **Java反射** - Java反射机制允许运行时检查类、接口、字段和方法的信息,并能够动态地调用方法和修改字段值。 - **应用场景**:动态加载类、实现插件化...
《Android源码开发实战》是针对Android系统源码分析与应用开发的一本深入实践书籍,主要面向具有...通过深入学习Android源码,开发者可以更好地理解系统底层运作,提升应用质量和性能,甚至为Android系统本身做出贡献。
四、源码学习路径 1. **Kernel源码分析**:理解设备驱动和内核模块,了解Android对Linux内核的定制。 2. **System Server源码**:探究系统服务的工作机制,如系统状态管理、服务启动等。 3. **UI框架源码**:分析...
- **IPC通讯机制**:学习Binder机制以及Service、AIDL等接口的使用。 - **HeaderViewListAdapter**:分析ListView中Header和Footer的实现方式。 - **WiFi设计原理**:探讨WiFi模块的设计思想和技术实现。 - **...
"MyBrowser(简单网页浏览器)"项目是学习Android WebView的绝佳案例。开发者可以了解如何加载网页,实现前进后退功能,以及如何处理JavaScript与Java之间的交互。 "365MobileSecretary v1.0.6(365手机助手AIDL)...
总结来说,深入学习Android系统源代码对于提升开发者的技能水平至关重要。通过分析源码,不仅可以了解系统内部工作原理,还能提升问题解决能力,对于个人职业发展和团队项目有着积极的推动作用。"Android系统源代码...
【Android源码备份】【学习相关】365MobileSecretary是一个专为Android平台设计的应用程序,其源码备份为我们提供了一次深入理解Android应用开发的宝贵机会。通过分析和研究365MobileSecretary的源码,我们可以了解...
Service Manager是Android Binder IPC(Inter-Process Communication)机制的一部分,它维护了一个服务注册表,使得不同进程间能安全有效地通信。Service Server则是实现特定服务的进程,如Activity Manager Service...
以上是Android源码开发实战课程中的主要知识点,通过这些内容的学习,开发者可以更深入地理解Android系统的运作机制,从而编写出更高效、更稳定的应用程序。同时,这也为定制化Android系统或者进行系统级优化打下了...
在Android源码开发实战6.09的课程中,我们将深入探索Android操作系统的内部机制,了解并实践如何基于源码进行应用开发。这个压缩包包含了关于Android系统开发的详细资料,帮助开发者提升对Android系统底层的理解,...
《Android开发艺术探索》是一本深受Android开发者喜爱的技术书籍,由任玉刚撰写。这本书深入浅出地讲解了Android开发中的各种技术难点和最佳实践,旨在帮助...总之,这本书的源码是Android开发者不可多得的学习资源。
在Android源码开发实战6.08的课程中,我们将深入探索Android操作系统的内部机制,了解并实践如何基于源码进行应用开发。这个压缩包包含了该课程的学习资料,旨在帮助开发者提升对Android系统核心功能的理解,以及...