Andriod 实现自己的Service
来源:互联网 发布:淘宝网有没有海外版 编辑:程序博客网 时间:2024/05/01 03:41
如果是纯C++程序的话,肯定得类似main_MediaService那样干了。
int main()
{
sp<ProcessState> proc(ProcessState::self());
sp<IServiceManager> sm = defaultServiceManager();
sm->addService(“service.name”,new XXXService());
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool();
}
看看XXXService怎么定义呢?
我们需要一个Bn,需要一个Bp,而且Bp不用暴露出来。那么就在BnXXX.cpp中一起实现好了。
另外,XXXService提供自己的功能,例如getXXX调用
1 定义XXX接口
XXX接口是和XXX服务相关的,例如提供getXXX,setXXX函数,和应用逻辑相关。
需要从IInterface派生
class IXXX: public IInterface
{
public:
DECLARE_META_INTERFACE(XXX);申明宏
virtual getXXX() = 0;
virtual setXXX() = 0;
}这是一个接口。
2 定义BnXXX和BpXXX
为了把IXXX加入到Binder结构,需要定义BnXXX和对客户端透明的BpXXX。
其中BnXXX是需要有头文件的。BnXXX只不过是把IXXX接口加入到Binder架构中来,而不参与实际的getXXX和setXXX应用层逻辑。
这个BnXXX定义可以和上面的IXXX定义放在一块。分开也行。
class BnXXX: public BnInterface<IXXX>
{
public:
virtual status_t onTransact( uint32_t code,
const Parcel& data,
Parcel* reply,
uint32_t flags = 0);
//由于IXXX是个纯虚类,而BnXXX只实现了onTransact函数,所以BnXXX依然是
一个纯虚类
};
有了DECLARE,那我们在某个CPP中IMPLEMNT它吧。那就在IXXX.cpp中吧。
IMPLEMENT_META_INTERFACE(XXX, "android.xxx.IXXX");//IMPLEMENT宏
status_t BnXXX::onTransact(
uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags)
{
switch(code) {
case GET_XXX: {
CHECK_INTERFACE(IXXX, data, reply);
读请求参数
调用虚函数getXXX()
return NO_ERROR;
} break; //SET_XXX类似
BpXXX也在这里实现吧。
class BpXXX: public BpInterface<IXXX>
{
public:
BpXXX (const sp<IBinder>& impl)
: BpInterface< IXXX >(impl)
{
}
vitural getXXX()
{
Parcel data, reply;
data.writeInterfaceToken(IXXX::getInterfaceDescriptor());
data.writeInt32(pid);
remote()->transact(GET_XXX, data, &reply);
return;
}
//setXXX类似
- Andriod 实现自己的Service
- andriod实现自己的ioc容器
- Andriod中Service的生命周期
- Andriod中Service的生命周期
- andriod service
- andriod的push实现
- andriod Service 与 Thread 的区别
- Andriod Service 启动与绑定的区别
- Andriod Service与Thread的区别
- andriod 继承view定义自己的形状
- Andriod---创建自己的内容提供器
- #Andriod# -----分享按钮的实现
- Andriod实现刮刮卡的效果
- Andriod Service 基本概念
- Andriod Service(一)
- Andriod Service概述篇
- Andriod Service Bind篇
- Andriod Service 远程
- StatSvn导出SVN代码量报告
- Win7无法访问2003server中的TFS,并且无法访问共享文件夹
- OpenCV函数cvWatershed图像分割中分水岭算法
- const函数参数优点
- GetPrivateProfileString 配置文件 ini
- Andriod 实现自己的Service
- eclipse快捷键及各种设置
- hadoop kerberos 安全机制
- 二级联通
- VS2008 动态库和静态库的生成和加载
- 如何修改adb install xxx.apk的lib属性为rw
- OpenCV图像处理和图像识别常用函数
- ORACLE 初始化参数OS_AUTHENT_PREFIX、REMOTE_OS_AUTHENT
- delphi完美经典--第七、八章