Android系统最常见也是初学者最难搞明白的就是Binder了,很多很多的Service就是通过Binder机制来和客户端通讯交互的。所以搞明白Binder的话,在很大程度上就能理解程序运行的流程。

这是一个用C++写的binder,一个服务器一恶搞客户端,代码如下:

server.cpp

 #include <binder/IServiceManager.h>
#include <binder/IBinder.h>
#include <binder/Parcel.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include <android/log.h>
using namespace android;
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "testService" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "ProjectName", __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "ProjectName", __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO , "ProjectName", __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN , "ProjectName", __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "ProjectName", __VA_ARGS__) class MyService : public BBinder
{
public:
MyService()
{
mydescriptor = String16("media.hello");
n=;
}
virtual ~MyService() {}
//This function is used when call Parcel::checkInterface(IBinder*)
virtual const String16& getInterfaceDescriptor() const
{
LOGE("this is enter ==========getInterfaceDescriptor");
return mydescriptor;
}
protected:
void show()
{
LOGE("this is for test show!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
LOGE("this is for test show!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
LOGE("this is for test show!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
LOGE("this is for test show!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
LOGE("this is for test show!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
}
virtual status_t onTransact( uint32_t code,const Parcel& data,Parcel* reply,uint32_t flags = )
{
LOGD("enter MyService onTransact and the code is %d",code);
/*
if (data.checkInterface(this))
LOGD("checkInterface OK");
else
{
LOGW("checkInterface failed");
return BBinder::onTransact(code, data, reply, flags);
}
*/
switch (code)
{
case :
LOGD("MyService interface 1");
break;
case :
LOGD("MyService interface 2");
cb = data.readStrongBinder();
break;
case :
{
LOGD("MyService interface 3, exit");
//No unregister service routine?
//It should return to client first and then call exit in another place.
exit();
break;
}
case :
{//call cb
LOGD("MyService interface 4 before if================");
cb = data.readStrongBinder();
if (cb != NULL)
{
LOGD("MyService interface 4");
Parcel in, out;
in.writeInterfaceToken(String16("android.os.ISetupCallback"));
in.writeInt32(n++); //向客户端发送数据 in.writeCString("This is a string !");
cb->transact(, in, &out, );
show();
}
break;
}
default:
return BBinder::onTransact(code, data, reply, flags);
}
return ;
}
private:
String16 mydescriptor;
sp<IBinder> cb;
int n;
};
int main()
{
sp<IServiceManager> sm = defaultServiceManager(); //获取ServiceManager服务代理
status_t ret;
//register MyService to ServiceManager
MyService* srv = new MyService();
ret = sm->addService(String16("media.hello"), srv); // 注册服务
LOGD("addservice media.hello return %d", ret);
//call binder thread pool to start
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool(true); //参数默认也是true,进入服务的循环监听状态
return ;
}

clinet.cpp

 #include <binder/IServiceManager.h>
#include <binder/IBinder.h>
#include <binder/Parcel.h>
#include <binder/ProcessState.h>
#include <binder/IPCThreadState.h>
#include <private/binder/binder_module.h>
#include <android/log.h> using namespace android;
#ifdef LOG_TAG
#undef LOG_TAG
#endif
#define LOG_TAG "testCallback" #define LOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "ProjectName", __VA_ARGS__)
#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG , "ProjectName", __VA_ARGS__)
#define LOGI(...) __android_log_print(ANDROID_LOG_INFO , "ProjectName", __VA_ARGS__)
#define LOGW(...) __android_log_print(ANDROID_LOG_WARN , "ProjectName", __VA_ARGS__)
#define LOGE(...) __android_log_print(ANDROID_LOG_ERROR , "ProjectName", __VA_ARGS__) class MySetupCallback : public BBinder
{
public:
MySetupCallback()
{
mydescriptor = String16("android.os.ISetupCallback");
}
virtual ~MySetupCallback() {}
virtual const String16& getInterfaceDescriptor() const
{
return mydescriptor;
}
protected:
virtual status_t onTransact( uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags = )
{
LOGD("enter MySetupCallback onTransact, code=%u", code);
if (data.checkInterface(this)) //检查 mydescriptor 类描述字符串
LOGD("checkInterface OK");
else
{
LOGW("checkInterface failed");
return -;
}
switch (code) //code为服务器发送的code,根据code实现不同的函数
{
case :
LOGD("From Server code = %u", code);
LOGD("From Server code = %u", code);
break;
case :
{
LOGD("From Server code = %u", code);
LOGD("Frome server data = %d", data.readInt32()); //从服务端接收数据
LOGD("Frome server string = %s", data.readCString()); break;
}
default:
break;
}
return ;
}
private:
String16 mydescriptor;
}; int main()
{
sp<IServiceManager> sm = defaultServiceManager(); //获取ServiceManager服务代理
sp<IBinder> b = sm->getService(String16("media.hello")); //查询服务
if (b == NULL)
{
LOGW("Can't find binder service \"media.hello\"");
return -;
}
Parcel in1,out1;
MySetupCallback *cb = new MySetupCallback();
in1.writeStrongBinder(sp<IBinder>(cb));
int ret = b->transact(, in1, &out1, ); //TRANSACTION_registerSetup = 4
LOGD("transact(4) return %d", ret);
ProcessState::self()->startThreadPool();
IPCThreadState::self()->joinThreadPool(); //参数默认也是true,进入服务的循环监听状态
return ;
}

Android.mk

# Copyright 2006 The Android Open Source Project
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES := \
libcutils \
libbinder \
libutils \
libhardware
LOCAL_SRC_FILES:= client.cpp
LOCAL_MODULE_TAGS = eng tests
LOCAL_MODULE:= testClient
include $(BUILD_EXECUTABLE) include $(CLEAR_VARS)
LOCAL_SHARED_LIBRARIES := \
libcutils \
libbinder \
libutils \
libhardware
LOCAL_SRC_FILES:=server.cpp
LOCAL_MODULE:= testServer
LOCAL_MODULE_TAGS = eng tests
include $(BUILD_EXECUTABLE)

客户端运行结果如下:

aaarticlea/png;base64,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" alt="" />

以上代码参考别人写的做了点修改,有错误的地方欢迎指出来,谢谢。

C++使用binder实例的更多相关文章

  1. 自顶向下分析Binder【1】—— Binder实例篇

    欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 一个Binder实例 我们Binder的学习将从以下的一个实例開始.依据Android文档中的描写叙述,创建一个Bin ...

  2. 笔记:Binder通信机制

    TODO: 待修正 Binder简介 Binder是android系统中实现的一种高效的IPC机制,平常接触到的各种XxxManager,以及绑定Service时都在使用它进行跨进程操作. 它的实现基 ...

  3. Android aidl Binder框架浅析

      转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/38461079 ,本文出自[张鸿洋的博客] 1.概述 Binder能干什么?B ...

  4. 深入理解Binder(一),从AIDL谈起

    打算写一篇Binder介绍的文章,仔细想想一篇文章貌似很难厘清,于是我打算从AIDL入手,本篇先来简单介绍下AIDL的使用,然后在此基础上我们继续来研究Binder的工作原理.小伙伴们都知道,AIDL ...

  5. 浅谈Service Manager成为Android进程间通信(IPC)机制Binder守护进程之路

    文章转载至CSDN社区罗升阳的安卓之旅,原文地址:http://blog.csdn.net/luoshengyang/article/details/6621566 上一篇文章Android进程间通信 ...

  6. Service组件 总结 + 绑定理Service三种实现方式 Messager + Binder + AIDL

    在Android中进程按优先级可以分为五类,优先级从高到低排列: - 前台进程 该进程包含正在与用户进行交互的界面组件,比如一个Activity - 可视进程 该进程中的组件虽然没有和用户交互,但是仍 ...

  7. Binder机制-简单用法(一)

    Binder算是android里面比较难懂的部分了,但是非常重要,基本上,当我们深入到进程交互的阶段,Binder都是一个绕不开的槛,所以我也希望帮助大家更浅显地了解到这个知识点.笔者想通过3篇博文简 ...

  8. android Binder机制(一)架构设计

    Binder 架构设计 Binder 被设计出来是解决 Android IPC(进程间通信) 问题的.Binder 将两个进程间交互的理解为 Client 向 Server 进行通信. 如下:bind ...

  9. Android AIDL实例解析

    AIDL这项技术在我们的开发中一般来说并不是很常用,虽然自己也使用新浪微博的SSO登录,其原理就是使用AIDL,但是自己一直没有动手完整的写过AIDL的例子,所以就有了这篇简单的文章. AIDL(An ...

随机推荐

  1. 自己实现简单的AOP(五)使Demo适应webApi、亦可完成属性自动注入

    在前文的Demo中,webApi的Controller是不能自动注入的,原因是 IHttpController 和 IController 是通过两个不同的途径进行激活的. IHttpControll ...

  2. 什么是SARG ?

    看书看到好几次这几个字母,每次都查,每次查完下次看到还忘记,还是得查. 简单的理解就是:sql查询语句查询过程中用到索引查找的是SARG写法 sql查询语句查询过程中未用到索引就是非SARG写法

  3. 转载:《TypeScript 中文入门教程》 13、类型兼容性

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 TypeScript里的类型兼容性基于结构子类型的. 结构类型是只一种只使用其成 ...

  4. Hibernate实现有两种配置,xml配置与注释配置

    hibernate实现有两种配置,xml配置与注释配置. (1):xml配置:hibernate.cfg.xml (放到src目录下)和实体配置类:xxx.hbm.xml(与实体为同一目录中) < ...

  5. socket.io,io=Manager(source, opts)

    原文:http://www.cnblogs.com/xiezhengcai/p/3968067.html 当我们在使用 var socket = io("ws://103.31.201.15 ...

  6. PHP 根据key 给二维数组分组

    我们经常拿到一个二维数组出来,会发现结果和自己想要的有些偏差,可能需要根据二维数组里的某个字段对数组分组.先来看以下数组, Array ( [0] => Array ( [id] => 1 ...

  7. java web学习总结(二十一) -------------------模拟Servlet3.0使用注解的方式配置Servlet

    一.Servlet的传统配置方式 在JavaWeb开发中, 每次编写一个Servlet都需要在web.xml文件中进行配置,如下所示: 1 <servlet> 2 <servlet- ...

  8. http cancelled状态与ajax 超时

    在最近一周,我们的前端在测试某些批量超过的某个步骤时,发现请求好像发出来,但是后台状态没有变化,说是最近才出现的问题,以前一直都是正常的,两天连续出现两次之后,来找笔者,首先检查了下中间件的日志,发现 ...

  9. 原生JS实战:经典贪吃蛇(开局10倍速度,来看看你最高能得多少分!)

    本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5875523.html 该程序是本人的个人作品,写的不好,未经本人允许,请 ...

  10. JavaScript基本语法(一)

    前段时间学习了HTML和CSS,也实战了一些结构较简单的项目.在还没运用到JS的知识时,做出来的效果总觉得少了些什么.虽然总体布局与一些基本的特效,也能用HTML+CSS就能完成.但如今开始进入Jav ...