Android IPC通信

【跨进程的交互】 IPC通信以下是两种方式
1.Messenger信使
   实现的原理:
   在server和client端通过一个messenger来传递消息。该对象就相当于一个信息的中转站,所有的信息都要用这个对象
   来携带。
   客户端向服务器端发送信息,需要服务器端的信使对象,然后他需要接受到消息,就要创建一个自己的messenger对象,
   作为消息的一部分,传递给服务器端,然后服务器就可以通过客户端的信使向他发送消息。


   Messenger使用的过程
   (1).在server端创建一个信使对象,  serverMessenger = new Messenger(handler);
   (2).client端要通过bindService的方法绑定服务器端。
   (3).在server端的onBind方法中返回一个binder的对象,通过
messenger.getBinder()的方法。
   (4).在客户端可以获取到服务器端的信使了。向服务器发送信息。
   (5).发送信息的时,可以放入客户端的信使。


   小结:
   通过信使实现跨进程通信,其实他的底层是AIDL原理,和Handler与Thread的用法相似。


2.AIDL方式传递   Android Interface Defintion Language
适用于不同的应用程序之间的远程服务。


书写步骤:
1.在服务器端的src文件夹下,创建一个.aidl的文件,在这个文件当中定义客户端远程访问服务器端的方法。
2.在.aidl文件当中定义的方法和普通方法是一样的都有返回值和参数。
不能使用final和static关键字修饰方法。
3.在服务端暴漏aidl这个类。并且调用Stub内部类
4.实现aidl当中的方法。


原理:
andoird系统当中自带一块存放aidl公共的区域,服务器端通过aidl文件,写入要传到给客户端的内容。
然后通过onBind()方法返回一个binder对象(其实这个binder对象是继承与binder类实现了aidl接口的stub对象),
然后把生成的binder对象,通过序列化的方式写入到共享的区域当中。


客户端也需要一个aidl文件,这样你才能直到服务器端在共享区域端的文件和内容,然后客户端通过绑定服务,
返回了一个binder对象,这个binder对象其实是共享区域中服务器端生成的binder对象经过反序列化的方式生成
的对象。通过binder对象,拿到服务器端传来的内容。


注意点:
1.服务器端和客户端其实是对同一个aidl文件进行操作的。
2.服务器端生成的binder对象和客户端返回的binder对象不是同一个对象,
是同样内容的两个对象。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值