Binder机制分析(3)—— 实现自己的Service
来源:互联网 发布:淘宝的信用评价体系 编辑:程序博客网 时间:2024/04/29 10:04
本文转载于:http://blog.csdn.net/ljsbuct/article/details/7108052
本文是对《Android技术内幕-系统卷》第三章的摘抄和整理。
1)核心服务通常在独立的进程里执行。
2)必须提供IBinder 接口,让应用程序可以跨进程绑定和呼叫。
3)因为共享,所以必须确保多线程安全(Thread-safe)。
4)以C++类别定义,获取其对象,通过ServiceManager的协助,将该对象参考值传给IServiceManager::addService()函数,加入到Binder Driver 里。
5)应用程序可通过ServiceManager 的协助远距离绑定该核心服务,此时ServiceManager 会回传IBinder 接口给应用程序。
6)应用程序可通过IBinder::transact()函数与核心服务互传数据。
2. 下面以C++代码为例来分析如何实现一个自己的Service。假设我们需要实现的服务接口为TestService,名称为service.testservice,具体流程如下:
首先,定义ITestService接口,即TestService服务,如代码清单3-63所示。
2.1 定义ITestService接口
class ITestService: public IInterface { public: DECLARE_META_INTERFACE(TestService);//申明宏 virtual getTestService() = 0; virtual setTestService() = 0; }
2.2 然后,定义BnTestService接口和BpTestService接口,如代码清单3-64所示。
//BnTestService的定义
class BnTestService: public BnInterface<ITestService>
{
public:
virtual status_t onTransact( uint32_t code,
const Parcel& data,
Parcel
reply,
uint32_t flags = 0);
};
//BnTestService的实现
IMPLEMENT_META_INTERFACE(TestService, "Android.testservice.IestService"); status_t BnTestService::onTransact( uint32_t code, const Parcel& data, Parcel reply, uint32_t flags) { switch(code) { case GET_TESTSERVICE: { CHECK_INTERFACE(ITestService, data, reply); return NO_ERROR; } break; }
//BpTestService的实现
class BpTestService: public BpInterface<ITestService> { public: BpTestService (const sp<IBinder>& impl) : BpInterface< ITestService >(impl) { } //getTestService //setTestService }
2.3 写好了自己的服务,最后是使用自己服务的方法
使用TestService
int main() { sp<ProcessState> proc(ProcessState::self()); sp<IServiceManager> sm = defaultServiceManager(); sm->addService("service.testservice",new TestService()); ProcessState::self()->startThreadPool(); IPCThreadState::self()->joinThreadPool(); }
- Binder机制分析(3)—— 实现自己的Service
- Binder机制分析(3)—— 实现自己的Service
- Binder机制分析(3)—— 实现自己的Service
- Binder机制分析(2)——从MediaService中看Binder的实现和使用(1)
- Binder机制分析(2)——从MediaService中看Binder的实现和使用(2)
- Binder机制分析(2)——从MediaService中看Binder的实现和使用(1)
- Binder机制分析(2)——从MediaService中看Binder的实现和使用(2)
- Binder机制分析(2)——从MediaService中看Binder的实现和使用(1)
- Binder机制分析(2)——从MediaService中看Binder的实现和使用(1)
- Binder机制分析(2)——从MediaService中看Binder的实现和使用(2)
- Binder机制分析(1)——Binder结构简介
- Binder机制分析(1)——Binder结构简介
- Binder机制分析(1)——Binder结构简介
- Android系统的Binder机制之一——Service Manager
- Android系统的Binder机制之一——Service Manager
- Android系统的Binder机制之一——Service Manager
- Android系统的Binder机制之一——Service Manager
- Android系统的Binder机制之一——Service Manager
- C# 特性详解
- xml的封装
- 使用less 书写animation frame
- linux网络编程之posix 线程(四):posix 条件变量与互斥锁 示例生产者--消费者问题
- Java精华积累:每个初学者都应该搞懂的问题
- Binder机制分析(3)—— 实现自己的Service
- Android禁止屏幕旋转,旋转屏幕时不重新加载当前activity
- 停止和打开服务
- TIOBE 2013年6月编程语言排行榜
- 用JQuery添加*号
- poj 1191 棋盘分割
- XML基础
- linux用户态和内核态理解
- 统计数字在排序数组中出现的次数