当前位置: 首页 > news >正文

新注册的公司怎么做网站怎么做网站主页

新注册的公司怎么做网站,怎么做网站主页,浅谈网站的主色调设计,wordpress做新闻网站的主题前言: Binder 是一种 IPC 机制,使用共享内存实现进程间通讯,既可以传递消息,也可以传递创建在共享内存中的对象,而Binder本身就是用共享内存实现的,因此遵循Binder写法的类是可以实例化后在进程间传递的。…

前言:

Binder 是一种 IPC 机制,使用共享内存实现进程间通讯,既可以传递消息,也可以传递创建在共享内存中的对象,而Binder本身就是用共享内存实现的,因此遵循Binder写法的类是可以实例化后在进程间传递的。

Binder在Android架构中有很重的地位,各个模块都在重度使用它,从代码可读性角度看,在为熟悉之前的可读性较差。从整体架构的角度看,在各个模块中通过IPC分离接口和实现有效地提高了扩展性。

写法:

1.定义接口

这个接口需要 Client/Bp 和 Server/Bn 都要遵循,Client需要关注有哪些消息类型,即enum值,Server需要关注虚函数,主要任务是根据消息中的enum值判断不同的业务类型,然后调用相应的虚函数。

/** IDemo.h
*/class IDemo : public IInterface {public:enum {ALERT = IBinder::FIRST_CALL_TRANSACTION,PUSH,ADD};// Sends a user-provided value to the servicevirtual void        push(int32_t data)          = 0;// Sends a fixed alert string to the servicevirtual void        alert()                     = 0;// Requests the service to perform an addition and return the resultvirtual int32_t     add(int32_t v1, int32_t v2) = 0;DECLARE_META_INTERFACE(Demo);
};// This implementation macro would normally go in a cpp file
IMPLEMENT_META_INTERFACE(Demo, "com.my.Demo");

2.服务端实现

服务端需要继承 BnInterface<INTERFACE_NAME>,当前例子里需要继承 BnInferface<IDemo> , BnInterface 有一个纯虚函数onTransact需要实现。

/** BnDemo.hpp
*/class BnDemo : public BnInterface<IDemo> {virtual status_t onTransact(uint32_t code, const Parcel& data,Parcel* reply, uint32_t flags = 0);
};status_t BnDemo::onTransact(uint32_t code, const Parcel& data,Parcel* reply, uint32_t flags) {data.checkInterface(this);switch(code) {case ALERT: {alert();return NO_ERROR;} break;case PUSH: {int32_t inData = data.readInt32();push(inData);return NO_ERROR;} break;case ADD: {int32_t inV1 = data.readInt32();int32_t inV2 = data.readInt32();int32_t sum = add(inV1, inV2);reply->writeInt32(sum);return NO_ERROR;} break;default:return BBinder::onTransact(code, data, reply, flags);}
}

如果不希望把业务代码和Binder架构代码混到一起,那么就再定义一个类来实现业务层。

/** Demo.hpp
*/class Demo : public BnDemo {virtual void push(int32_t data) {// Do something with the data the client pushed}virtual void alert() {// Handle the alert}virtual int32_t add(int32_t v1, int32_t v2) {return v1 + v2;}
};

3.客户端实现

客户端需要继承BpInterface<INTERFACE_NAME>,然后就可以通过 BpInterface 的 remote()->transact 来给 服务端发送消息了。那么如何和服务端关联起来呢?这些工作是Binder内部自行关联的,我们只需要在定义Client的时候指定如下接收 IBinder 入参的构造函数即可。

/*
*  BpDemo.hpp
*/class BpDemo : public BpInterface<IDemo> {public:BpDemo(const sp<IBinder>& impl) : BpInterface<IDemo>(impl) { }virtual void push(int32_t push_data) {Parcel data, reply;data.writeInterfaceToken(IDemo::getInterfaceDescriptor());data.writeInt32(push_data);remote()->transact(PUSH, data, &reply);}virtual void alert() {Parcel data, reply;data.writeInterfaceToken(IDemo::getInterfaceDescriptor());remote()->transact(ALERT, data, &reply, IBinder::FLAG_ONEWAY);}virtual int32_t add(int32_t v1, int32_t v2) {Parcel data, reply;data.writeInterfaceToken(IDemo::getInterfaceDescriptor());data.writeInt32(v1);data.writeInt32(v2);remote()->transact(ADD, data, &reply);int32_t res;status_t status = reply.readInt32(&res);return res;}
};

4.如何使用

服务端注册服务给系统的服务管理器。

defaultServiceManager()->addService(String16("com.my.Demo"), new Demo());

客户端在系统的服务管理器中根据 标识字符串 查找相应的服务,把返回的值cast 为 INTERFACE 实例使用即可。

p<IServiceManager> sm = defaultServiceManager();
sp<IBinder> binder = sm->getService(String16("com.my.Demo"));
sp<IDemo> demo = interface_cast<IDemo>(binder);demo->alert();
demo->push(65);
int32_t sum = demo->add(453, 827);

5.代码阅读

服务端如何查找service的标识字符串?

代码中搜索 addService

客户端如何查找连接了哪个Binder服务端?

代码中搜索 getService

记住上面两点,能够快速定位客户端和服务端的关联关系。

参考:

https://android.googlesource.com/platform/frameworks/native/+/jb-mr1-dev/include/binder/IInterface.h

http://www.shuangfujiaoyu.com/news/49049.html

相关文章:

  • 用哪个网站做相册视频文件夹网络营销和网络销售的关系
  • 做pc端网站多少钱重庆疫情最新消息
  • 烟台北京网站建设公司小说排行榜百度
  • 做个网站大约多少钱餐饮管理和营销方案
  • 品牌战略咨询公司南宁百度seo排名价格
  • 学校网站需求网络营销师课程
  • php做网站难么网站关键词全国各地的排名情况
  • 2014 湖南个人网站备案可以做b2b吗app投放推广
  • 吕梁网站建设公司百度电脑版官网
  • 网站建设新闻网站优化关键词价格
  • 手机有软件做ppt下载网站有哪些内容自建站
  • 就在刚刚湖北传来疫情大消息seo博客教程
  • 动易网站管理系统下载北京自动网络营销推广
  • 北京旅游外贸网站建设百度推广怎么看关键词排名
  • 电商网站如何避免客户信息泄露公司品牌营销策划
  • 台州网站设计哪家好武汉seo网络优化公司
  • 昆明做网站优化价格营销方案模板
  • 厦门网站建设哪家专业seo思维
  • 网站建设基本流程信息技术国际新闻最新消息十条
  • 没有网站怎么做百度竞价怎么引流客源最好的方法
  • 胶州网站建设电话广州百度首页优化
  • 沈阳网站建设bwspire百度指数快刷软件
  • 外包网站会自己做原型吗专业提升关键词排名工具
  • 温州本地网站seo分析seo诊断
  • 免费的网站登录模板下载百度搜索广告投放
  • 做婚恋交友网站模板域名注册网
  • 英语做美食网站百度推广个人怎么开户
  • 建立https网站seo免费系统
  • 宣传片制作公司推荐搜索网站排名优化
  • 网站开发端口查询百度识图在线使用一下