进程间通信的意义在于进程间数据交换以实现同步。
看了主席的进阶书,感觉自己的视野新打开了一些什么,挺奇特的感觉。
- 先了解Serializable接口
序列化接口没有方法或字段,仅用于标识可序列化的语义。
JavaAPI解释:
An empty marker interface for classes that want to support serialization and deserialization based on the ObjectOutputStream and ObjectInputStream classes. Implementing this interface is enough to make most classes serializable. If a class needs more fine-grained control over the serialization process (for example to implement compatibility with older versions of the class), it can achieve this by providing the following two methods (signatures must match exactly):
private void writeObject(java.io.ObjectOutputStream out) throws IOException
private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException
大意:
基于ObjectOutputStream和ObjectInputStream类来支持序列化和反序列化的类一个空标记接口, 实现这个接口就足以使大多数类可序列化了。 如果类需要对序列化过程进行更精细的控制(例如实现与旧版本的兼容性),则可以通过提供以下两种方法(签名必须完全匹配)来实现:
private void writeObject(java.io.ObjectOutputStream out)throws IOException
private void readObject(java.io.ObjectInputStream in)throws IOException,ClassNotFoundException
-Parcelable接口 (android.os)
public class MyParcelable implements Parcelable {
private int mData;
//序列化功能
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
//反序列化功能
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
}
private MyParcelable(Parcel in) {
mData = in.readInt();
}
public int describeContents(){
return 0;
}
}
关于跨进程通信,很喜欢一句话:
Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务端会返回一个包含了服务端业务
调用的Binder对象,通过这个Binder对象,客户端就可以获取服务端提供的服务或者数据,这服务包括普通
服务和基于AIDL的服务。
Binder主要用在Service上,包括AIDL和Messenger。Binder牵扯甚广,不论是深度还是广度都很有挑战性。下篇开始正式走进这部分知识~