进程通信浅解

进程通信相当于就是自己的app和别的应用通信,有四种方式,正好对应了四大组件Activity,Broadcast,ContentProvider,和Service。利用service通信也叫AIDL.

Activity  我们直接用intent就可以实现通信,比如我们调用打电话发短信。只不过intent里面传的不是类名而是action

Broadcast  我们可以发广播让别的应用接受,这个也很简单。一般用于自家的app通信

ContentProvider  我们也经常用到,比如获取联系人或者相册图片

Service   利用service通信,我们平时叫AIDL,如果我们的App_A要和另一款App_B交互,我们称A为客户端,B为服务端。

服务端  我们应该先在服务端创建aidl的文件夹,然后创建aidl文件,它的写法其实就是一个接口,然后我们在写一个servicele类,在onbind的方法中返回继承aidl接口.stub的内部类。要在清单清单文件注册下service,这样服务端就完成了了。

客户端  把服务端的aidl文件夹拷到客户端下,然后在activity中绑定服务,在5.0以上要用显式绑定,服务端aidl文件的包名和service的包名加类名,绑定的方法中我们还要传入serviceconnection接口实现类,在这个实现类中我们就可以获取aidl接口的实现类,就可以获取到服务端的数据

如果我们要接受对象,我们需要对象序列化,实现parcelable接口。用法和String是一样的,特别要注意的是  将对象考过去的时候,要保证包名跟服务端的一样

通信的媒介其实就是我们继承的aidl接口.stub生成的Ibinder

我们还可以使用messager 实现通信,不用谢aidl,还能实现双向通信。也需要绑定服务,serviceconnection

使用AIDL遇到的问题,

1、5.0以上使用隐式绑定会报错Service Intent must be explicit

2、清单文件注册service,如果没有加intent-filter,serviceconnection会不响应

3、绑定后立马会调用也会造成serviceconnection会不响应,报空指针,

猜你喜欢

转载自blog.csdn.net/super_xiaojian/article/details/81068496