Android中实现native服务利用binder与应用通信
来源:互联网 发布:unity3d仙侠资源 编辑:程序博客网 时间:2024/05/16 07:59
主要讲解一下,Android的上层应用通过binder机制调用native服务,下面这个图,主要用来描述,我们在实现binder相关的bp和bn端的时候,基本的类图。
上图基本说明了一下 如何利用binder实现底层的服务,基本实现就是上面这样一个模板,下面我会就我自己实现的一个demo,详细说明一下,如何来写code,之前也是看别人的博客,参考到的例子,但是例子在我这有很多问题,就改了改,反正是可以正常使用了。
上图是基本说明了,我的这个demo的类继承关系,这个demo主要实现了Java上层利用binder调用C++层的bn端,而后C++的bn端再将请求返回给上层的,这样一个实例,这个实例主要是做了一个加法运算。
C++实现的native服务
AddService.h
#ifndef ANDROID_GUILH_ADD_SERVICE_H#define ANDROID_GUILH_ADD_SERVICE_H#include <utils/threads.h>#include <utils/RefBase.h>#include <binder/IInterface.h>#include <binder/Parcel.h>#include <binder/IBinder.h>#include <binder/Binder.h>#include <binder/IBinder.h>#include <binder/IServiceManager.h>#include <utils/Log.h>#include <utils/misc.h>#include <binder/Parcel.h>#include <utils/StringArray.h>#include <utils/threads.h>#include <cutils/properties.h>#include "jni.h"#include "JNIHelp.h"#include <stdio.h>#include <signal.h>#include <sys/stat.h>#include <sys/types.h>#include <signal.h>#include <dirent.h>#include <assert.h>namespace android{class AddService : public BBinder{mutable Mutex mLock;int32_t mNextConnId;public:static int instantiate();AddService();virtual ~AddService();virtual status_t onTransact(uint32_t, const Parcel&, Parcel*, uint32_t);};}#endif
AddService.cpp
#include <AddService.h>#include <binder/IServiceManager.h>#include <utils/Debug.h>#include <utils/Log.h>#include <binder/IPCThreadState.h>#include <binder/Parcel.h>//#include <binder/IBinder.h>#include <utils/String8.h>#include <binder/IBinder.h>#include <binder/IServiceManager.h>#include <utils/Log.h>#include <utils/misc.h>#include <binder/Parcel.h>#include <utils/StringArray.h>#include <utils/threads.h>#include <cutils/properties.h>#include "jni.h"#include "JNIHelp.h"//#include "android_util_Binder.h"#include <stdio.h>#include <signal.h>#include <sys/stat.h>#include <sys/types.h>#include <signal.h>#include <dirent.h>#include <assert.h>namespace android {static struct sigaction oldact;static pthread_key_t sigbuskey;sp<IBinder> binder;int AddService::instantiate() {LOGE("AddService instantiate");int r = defaultServiceManager()->addService(String16("flyfot.add"), new AddService());LOGE("AddService r = %d/n", r);return r;}AddService::AddService(){LOGV("AddService created");mNextConnId = 1;pthread_key_create(&sigbuskey, NULL);}AddService::~AddService(){pthread_key_delete(sigbuskey);LOGV("AddService destroyed");}status_t AddService::onTransact(uint32_t code, const Parcel& data, Parcel* reply, uint32_t flags) {LOGE("AddDemo", "AddService.cpp:onTransact:" + code);switch (code) {case 0: {LOGI("AddDemo", "addservice::onTransact");//pid_t pid = data.readInt32();//int a = data.readInt32();//int b = data.readInt32();//int num = a + b;//sp < IServiceManager > sm = defaultServiceManager();LOGE("AddService","start get java service");//binder = sm->getService(//String16("zx.java"));//String16 info = data.re//data.enbinder = data.readStrongBinder();LOGE("AddService.cpp","data.readStrongBinbder");if (binder == 0) {LOGE("AddService", "get java local service failed");return NO_ERROR;}int a = data.readInt32();int b = data.readInt32();Parcel _data_sec ;//String16 interface = "cn.zx.callback";_data_sec.writeInterfaceToken(String16("cn.zx.secrity.RemoteSecrityCallback"));_data_sec.writeInt32(a);_data_sec.writeInt32(b);LOGE("AddService", "get java local service sucessful");binder->transact(0,_data_sec, reply);return NO_ERROR;}break;default:return BBinder::onTransact(code, data, reply, flags);}}};
。。。。。待续/。。。。。
- Android中实现native服务利用binder与应用通信
- Android Binder机制的Native应用&&Android系统RPC与Binder && Android Service学习之AIDL, Parcelable和远程服务
- Android Service :利用Binder实现通信
- Android进程通信Binder(2)-Android系统服务与Binder
- Android下在C++环境实现native层binder服务
- Android中实现Native与H5的通信方案汇总
- Android利用Binder进行通信
- android 利用AIDL实现Binder跨进程通信
- Android Service:利用Binder通信中,传递自定义类型
- Android利用Binder类实现对服务的调用
- Android Binder机制的Native应用
- Android Binder机制的Native应用
- Android中Binder机制实现进程间通信
- Android服务Binder实现小记
- 以Android中MediaServer启动来看Native层的Binder IPC通信机制
- android libbinder – Binder的Native实现
- Android Binder机制の设计与实现1-3(引言/面向对象的 Binder IPC/Binder 通信模型)
- android binder机制,注册系统服务---native客户端
- css3中transform属性及用法
- 前端开发入门--工具篇
- Actor模型
- hdu 3524 Perfect Squares【打表、除法取余、快速幂】
- 牢记!SQL Server数据库开发的二十一条军规(SQL收藏)
- Android中实现native服务利用binder与应用通信
- 对随机的10个数进行排序
- Apache Camel框架之事务控制
- 删除 MFC 默认菜单的两种方式
- Android中获取系统内存信息以及进程信息-----ActivityManager的使用(一) .
- 在Spring中使用JTA事务管理【两个数据库实现事务控制】
- Android广播事件机制,并实现简单的定时提醒功能
- DAO的意义
- 源码分析——System.arraycopy