【跨进程的交互】 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对象不是同一个对象,
是同样内容的两个对象。
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对象不是同一个对象,
是同样内容的两个对象。