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

自己这么做网站/怎么开发网站

自己这么做网站,怎么开发网站,做像素画的网站,超市管理系统进程间通信很多同学都使用到AIDL,这个是对Binder进行了一层封装。其实剥开AIDL,刺果果的使用Binder,有种很简单的方式,不过最好是系统应用,因为看Android版本的提升,在安全方面一直在完善,不排除…

进程间通信很多同学都使用到AIDL,这个是对Binder进行了一层封装。其实剥开AIDL,刺果果的使用Binder,有种很简单的方式,不过最好是系统应用,因为看Android版本的提升,在安全方面一直在完善,不排除以后只能系统权限才能使用这种方式。好了,Read the code~

服务端,首先要有一个Binder类,然后重写onTransact

public class MyBinder extends Binder {

String TAG = "MyBinder";

private Context context = null;

public MyBinder(Context context) {

// TODO Auto-generated constructor stub

this.context = context;

}

@Override

protected boolean onTransact(int code, Parcel data, Parcel reply, int flags) throws RemoteException {

switch (code) {

case 0://

//int len = data.readInt();

reply.writeInt(1);

Log.d(TAG, "onTransact case 0");

return true;

case 1://

return true;

}

return super.onTransact(code, data, reply, flags);

}

}

接着,搞一个服务,通过反射调用系统方法将其添加到servicemanager,早期Android版本貌似有直接的API,现在都需要反射调用了。

IBinder mb = new MyBinder(context) ;

try {

Class> serviceManager = Class.forName("android.os.ServiceManager");

Method method=serviceManager.getMethod("addService", String.class, IBinder.class);

method.invoke(null, "testService", mb);

Log.d(TAG, "add testService to systemservice");

} catch (Exception e) {

// TODO Auto-generated catch block

Log.i(TAG, "add testService fail");

e.printStackTrace();

}

服务端差不多就这样了,看看客户端怎么和这个玩意儿通信

先获取服务,

try {

Class> serviceManager = Class.forName("android.os.ServiceManager");

Method method=serviceManager.getMethod("getService", String.class);

ibinder = (IBinder) method.invoke(null, "testService");

Log.i("wwwwwww", "get testService success ibinder:"+ibinder);

} catch (Exception e) {

// TODO: handle exception

Log.i("wwwwwww", "get testService fail");

}

接着,这样使用

Parcel data =Parcel.obtain();

Parcel reply=Parcel.obtain();

byte[] cmdsetb = {0x02,0x02,0x21,0x44,0x02,0x14,0x09,0x42,0x08,0x00,0x00,0x20};

data.writeInt(12);

data.writeByteArray(cmdsetb);

try {

boolean c = ibinder.transact(0, data, reply, 0);

int ir = reply.readInt();

} catch (RemoteException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

这就把数据(data)发过去了,然后服务端可以通过replay返回数据;第一个参数是code;最后一个是flags,表示同步或异步。

是不是比封装AIDL简单。了解AIDL的同学看到上面的代码可能会注意到一点,就是服务端返回数据,即可对应到AIDL的out回传方式。差别在于AIDL是回传引用,所以像上面代码直接往replay写int那样的方式AIDL就做不到了。AIDL的话可以new一个类,传引用回去。

============================================================

客户端和服务端绑定后,可以监听服务端的状态,当服务端因为异常停止后,能收到死亡通知。如下

直接用binder的linkToDeath

try {

ibinder.linkToDeath(deathHandle, 0);

} catch (RemoteException e2) {

// TODO Auto-generated catch block

e2.printStackTrace();

}

final DeathRecipient deathHandle = new DeathRecipient(){

@Override

public void binderDied() {

// TODO Auto-generated method stub

Log.i("wwss", "binder is died");

}

};

这样,当服务端崩溃的时候,binder断开,即可接收到死亡通知。

如果是服务端需要监听客户端是否崩溃、被kill呢,又该如何?

那就有点不同了,因为客户端是不确定的,所以需要客户端注册一个binder进来。

http://www.lbrq.cn/news/1603819.html

相关文章:

  • 青岛市住房和城乡建设局网站/重庆森林壁纸
  • wordpress 404自定义/网站优化是什么意思
  • wordpress精致主题/长沙网站seo公司
  • 运营商网站登录注册/公司个人怎么做网络推广
  • 购物网站建设成本/专业做网站官网
  • 抖音代运营会不会看到以往的数据/长沙百度搜索排名优化
  • 购物车网站设计/全网营销推广案例
  • 做淘客都有什么网站/cfa三级和一二级关系大吗
  • 海洋高端的专业做网站/域名注册流程和费用
  • 株洲网站制作建设/b2b网站有哪些平台
  • 西安商城网站制作/百度数字人内部运营心法曝光
  • 网站死链/迈步者seo
  • 天津住房和城乡建设厅官方网站/网址外链平台
  • 内衣网站建立/做百度推广多少钱
  • 建设部网站建筑工程质保期/长春做网站公司长春seo公司
  • 如何建网站教程/可以看国外网站的浏览app
  • 各大网站投稿/员工培训课程
  • 网站为什么没有排名了/seo网站内部优化
  • 道真县城乡建设局网站/苏州网站制作开发公司
  • 外国做袜子的网站/线上推广具体应该怎么做
  • 做自媒体查找素材的网站/网站seo优化课程
  • 国务院关于网站建设/百度app安装
  • 小白测评做网站/百度 营销中心
  • 如何在电脑上建立网站/谷歌下载
  • 中国日报网英文官方网站建设/中国制造网网站类型
  • 南通网站建设系统方案/西安网络推广外包公司
  • 手机怎样做网站/网站关键词优化建议
  • 网络专业的网站建设/福州seo网络推广
  • 灯饰网站建设/seowhy教研室
  • 猪八戒wordpress/常熟seo关键词优化公司
  • Hexo - 免费搭建个人博客07 - 添加右上角的“目录”
  • 【银河麒麟服务器系统】自定义ISO镜像更新内核版本
  • 2106. 摘水果
  • 腾讯人脸识别
  • 2025-08 安卓开发面试拷打记录(面试题)
  • 超聚变:智能体时代,AI原生重构城企数智化基因