赞
踩
Parcel简介
在IPC过程中,发送方可以使用Parcel提供的写方法,将待发送的数据以特定格式写入Parcel对象。接收方可以使用Parcel提供的读取方法从Parcel对象中读取特定格式的数据。
Parcel实例的默认容量为200KB。如果您想要更多或更少,请使用setCapacity(int)更改它。
注意:只有以下数据类型的数据才能写入或从包裹中读取: byte, byteArray, short, shortArray, int, intArray, long, longArray, float, floatArray, double, doubleArray, boolean, booleanArray, char, charArray, String, StringArray、 PlainBooleanArray, Serializable, Sequenceable, 和 SequenceableArray。
方法介绍
2.1 addAppClassLoader(ClassLoader newClassLoader)public void addAppClassLoader(ClassLoader newClassLoader)添加第三方ClassLoader用于实例初始化。如果您需要封装或取消封装自定义序列化数据,请添加您自己的ClassLoader。
2.2 writeSequenceablepublic final void writeSequenceable(Sequenceable val)将可序列化对象写入Parcel实例。其余的方法参考文档Parcel资料
封装Sequenceable实体类我们参考Sequenceable资料
动手实践
今天将一个Sequenceable的集合存到Parcel然后读取出来
4.1 新建两个类 A类用户存放具体属性,B类用于存放A的实体类集合
A类代码如下
- public static class A implements Sequenceable {
- private int a;
-
- private int b;
-
- private int c;
-
- public A() {
- this(0, 0, 0);
- }
-
- public A(int a, int b, int c) {
- this.a = a;
- this.b = b;
- this.c = c;
- }
-
- @Override
- public boolean hasFileDescriptor() {
- return false;
- }
-
- @Override
- public boolean marshalling(Parcel out) {
- out.writeInt(a);
- out.writeInt(b);
- out.writeInt(c);
- return true;
- }
-
- @Override
- public boolean unmarshalling(Parcel in) {
- a = in.readInt();
- b = in.readInt();
- c = in.readInt();
- return true;
- }
-
- public static final Sequenceable.Producer<A> PRODUCER = new Sequenceable.Producer<A>() {
- public A createFromParcel(Parcel in) {
- A instance = new A();
- instance.unmarshalling(in);
- return instance;
- }
- };
-
- @Override
- public boolean equals(Object o) {
- if (this == o) return true;
- if (o == null || getClass() != o.getClass()) return false;
- A
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。