public final class Parcel
extends Object
java.lang.Object | |
↳ | android.os.Parcel |
容器用于可以通过IBinder发送的消息(数据和对象引用)。 一个包裹可以同时包含在IPC的另一侧(使用这里用于编写特定类型的各种方法,或者一般的Parcelable
接口)的Parcelable
数据,以及引起另一侧接收的对象的活动IBinder
一个代理IBinder与包裹中的原始IBinder连接。
包裹不是通用的序列化机制。 该类(以及用于将任意对象放入Parcel的对应Parcelable
API)被设计为高性能IPC传输。 因此,将任何Parcel数据放入持久性存储中是不恰当的:Parcel中任何数据的底层实现中的更改都会导致旧数据无法读取。
大部分的Parcel API都围绕着读写各种类型的数据。 这些功能有六大类可用。
最基本的数据功能是写入和读取原始数据类型: writeByte(byte)
, readByte()
, writeDouble(double)
, readDouble()
, writeFloat(float)
, readFloat()
, writeInt(int)
, readInt()
, writeLong(long)
, readLong()
, writeString(String)
, readString()
。 大多数其他数据操作都建立在这些之上。 给定数据使用主机CPU的字节进行写入和读取。
读取和写入原始对象的原始数组有多种方法,通常会导致写入4个字节的长度,然后是原始数据项。 读取方法可以将数据读入现有数组,或创建并返回新数组。 这些可用的类型是:
writeBooleanArray(boolean[])
, readBooleanArray(boolean[])
, createBooleanArray()
writeByteArray(byte[])
, writeByteArray(byte[], int, int)
, readByteArray(byte[])
, createByteArray()
writeCharArray(char[])
, readCharArray(char[])
, createCharArray()
writeDoubleArray(double[])
, readDoubleArray(double[])
, createDoubleArray()
writeFloatArray(float[])
, readFloatArray(float[])
, createFloatArray()
writeIntArray(int[])
, readIntArray(int[])
, createIntArray()
writeLongArray(long[])
, readLongArray(long[])
, createLongArray()
writeStringArray(String[])
, readStringArray(String[])
, createStringArray()
. writeSparseBooleanArray(SparseBooleanArray)
, readSparseBooleanArray()
. Parcelable
协议为对象从Parcels写入和读取自身提供了一种非常有效的(但低级别的)协议。 您可以使用直接方法writeParcelable(Parcelable, int)
和readParcelable(ClassLoader)
或writeParcelableArray(T[], int)
和readParcelableArray(ClassLoader)
来编写或读取。 这些方法将类类型及其数据写入Parcel,从而允许在稍后阅读时从相应的类加载器重建该类。
也有一些提供更有效的方式与Parcelables并工作方法: writeTypedObject(T, int)
, writeTypedArray(T[], int)
, writeTypedList(List
, readTypedObject(Parcelable.Creator
, createTypedArray(Parcelable.Creator
和createTypedArrayList(Parcelable.Creator
。 这些方法不会写入原始对象的类信息:相反,读取函数的调用者必须知道需要什么类型,并在合适的Parcelable.Creator
传递,以正确构造新对象并读取其数据。 (为了更高效地编写和读取非空的单个Parceable对象,您可以直接调用Parcelable.writeToParcel
和Parcelable.Creator.createFromParcel
)
一个称为Bundle
特殊类型安全容器可用于异构值的键/值映射。 这对于提高数据读写性能的优化有很多优化,其类型安全的API避免了在最终将数据内容封装到Parcel时难以调试类型错误。 使用的方法是writeBundle(Bundle)
, readBundle()
,并readBundle(ClassLoader)
。
Parcel的一个不寻常的功能是可以读取和写入活动对象。 对于这些对象,不写入对象的实际内容,而是写入引用该对象的特殊标记。 从Parcel中读回对象时,您不会获得对象的新实例,而是一个对原来写入的完全相同对象进行操作的句柄。 有两种形式的活动对象可用。
Binder
对象是Android通用跨进程通信系统的核心工具。 IBinder
接口描述了一个带有Binder对象的抽象协议。 任何这样的接口都可以写入到一个Parcel中,读取后您将收到实现该接口的原始对象或者将调用回传给原始对象的特殊代理实现。 使用的方法是writeStrongBinder(IBinder)
, writeStrongInterface(IInterface)
, readStrongBinder()
, writeBinderArray(IBinder[])
, readBinderArray(IBinder[])
, createBinderArray()
, writeBinderList(List)
, readBinderList(List)
, createBinderArrayList()
。
可以编写表示原始Linux文件描述符标识符的FileDescriptor对象,并返回ParcelFileDescriptor
对象以在原始文件描述符上操作。 返回文件描述符是原始的文件描述符的DUP:对象和fd是不同的,但在相同的底层文件流进行操作,具有相同的位置,等。该方法使用是writeFileDescriptor(FileDescriptor)
, readFileDescriptor()
。
最后一类方法用于编写和读取任意类型的标准Java容器。 这些都围绕着定义允许的对象类型的writeValue(Object)
和readValue(ClassLoader)
方法。 该容器的方法是writeArray(Object[])
, readArray(ClassLoader)
, writeList(List)
, readList(List, ClassLoader)
, readArrayList(ClassLoader)
, writeMap(Map)
, readMap(Map, ClassLoader)
, writeSparseArray(SparseArray)
, readSparseArray(ClassLoader)
。
Fields |
|
---|---|
public static final Creator<String> |
STRING_CREATOR |
Public methods |
|
---|---|
final void |
appendFrom(Parcel parcel, int offset, int length) |
final IBinder[] |
createBinderArray() |
final ArrayList<IBinder> |
createBinderArrayList() 从当前dataPosition()处使用 |
final boolean[] |
createBooleanArray() |
final byte[] |
createByteArray() 从包中读取并返回一个byte []对象。 |
final char[] |
createCharArray() |
final double[] |
createDoubleArray() |
final float[] |
createFloatArray() |
final int[] |
createIntArray() |
final long[] |
createLongArray() |
final String[] |
createStringArray() |
final ArrayList<String> |
createStringArrayList() 从当前dataPosition()处使用 |
final <T> T[] |
createTypedArray(Creator<T> c) 从当前dataPosition()中的parcel中读取并返回一个包含特定对象类型的新数组。 |
final <T> ArrayList<T> |
createTypedArrayList(Creator<T> c) 从当前dataPosition()中用 |
final int |
dataAvail() 返回剩余要从宗地中读取的数据量。 |
final int |
dataCapacity() 返回宗地中的空间总量。 |
final int |
dataPosition() 返回宗地数据中的当前位置。 |
final int |
dataSize() 返回包裹中包含的数据总量。 |
final void |
enforceInterface(String interfaceName) |
final boolean |
hasFileDescriptors() 报告包裹是否包含任何编组文件描述符。 |
final byte[] |
marshall() 返回宗地的原始字节。 |
static Parcel |
obtain() 从池中检索新的Parcel对象。 |
final Object[] |
readArray(ClassLoader loader) 在当前dataPosition()中从包中读取并返回一个新的Object数组。 |
final ArrayList |
readArrayList(ClassLoader loader) 从当前dataPosition()的parcel中读取并返回一个新的ArrayList对象。 |
final void |
readBinderArray(IBinder[] val) |
final void |
readBinderList(List<IBinder> list) 读入在当前dataPosition()中使用 |
final void |
readBooleanArray(boolean[] val) |
final Bundle |
readBundle() 从当前dataPosition()的parcel中读取并返回一个新的Bundle对象。 |
final Bundle |
readBundle(ClassLoader loader) 从当前dataPosition()的parcel中读取并返回一个新的Bundle对象,使用给定的类加载器来初始化Bundle的类加载器,以便以后检索Parcelable对象。 |
final byte |
readByte() 在当前dataPosition()处从包中读取一个字节值。 |
final void |
readByteArray(byte[] val) 从包中读取一个byte []对象并将其复制到给定的字节数组中。 |
final void |
readCharArray(char[] val) |
final double |
readDouble() 在当前dataPosition()处从地块读取双精度浮点值。 |
final void |
readDoubleArray(double[] val) |
final void |
readException() 用于从包裹头部读取异常结果的特殊功能,用于在收到交易结果后使用。 |
final void |
readException(int code, String msg) 抛出给定消息的异常。 |
final ParcelFileDescriptor |
readFileDescriptor() 从当前dataPosition()的parcel中读取FileDescriptor。 |
final float |
readFloat() 从当前dataPosition()的地块中读取浮点值。 |
final void |
readFloatArray(float[] val) |
final HashMap |
readHashMap(ClassLoader loader) 请使用 |
final int |
readInt() 在当前dataPosition()处从地块读取一个整数值。 |
final void |
readIntArray(int[] val) |
final void |
readList(List outVal, ClassLoader loader) 从当前dataPosition()的parcel中读取现有的List对象,使用给定的类加载器加载任何封闭的Parcelables。 |
final long |
readLong() 从当前dataPosition()的地块中读取一个长整数值。 |
final void |
readLongArray(long[] val) |
final void |
readMap(Map outVal, ClassLoader loader) 请使用 |
final <T extends Parcelable> T |
readParcelable(ClassLoader loader) 从包裹中读取并返回一个新的Parcelable。 |
final Parcelable[] |
readParcelableArray(ClassLoader loader) 从包裹中读取并返回一个新的Parcelable数组。 |
final PersistableBundle |
readPersistableBundle() 从当前dataPosition()的parcel中读取并返回一个新的Bundle对象。 |
final PersistableBundle |
readPersistableBundle(ClassLoader loader) 从当前dataPosition()的parcel中读取并返回一个新的Bundle对象,使用给定的类加载器来初始化Bundle的类加载器,以便以后检索Parcelable对象。 |
final Serializable |
readSerializable() 从包中读取并返回一个新的Serializable对象。 |
final Size |
readSize() 从当前dataPosition()的地块中读取大小。 |
final SizeF |
readSizeF() 在当前dataPosition()中从包中读取SizeF。 |
final SparseArray |
readSparseArray(ClassLoader loader) 从当前dataPosition()的parcel中读取并返回一个新的SparseArray对象。 |
final SparseBooleanArray |
readSparseBooleanArray() 从当前dataPosition()的parcel中读取并返回一个新的SparseBooleanArray对象。 |
final String |
readString() 从当前dataPosition()的地块中读取字符串值。 |
final void |
readStringArray(String[] val) |
final void |
readStringList(List<String> list) 读入在当前dataPosition()中用 |
final IBinder |
readStrongBinder() 从当前dataPosition()的地块中读取一个对象。 |
final <T> void |
readTypedArray(T[] val, Creator<T> c) |
final <T> void |
readTypedList(List<T> list, Creator<T> c) 读入包含在当前dataPosition()处使用 |
final <T> T |
readTypedObject(Creator<T> c) 从parcel中读取并返回一个类型化的Parcelable对象。 |
final Object |
readValue(ClassLoader loader) 从包裹中读取输入的对象。 |
final void |
recycle() 将一个Parcel对象放回池中。 |
final void |
setDataCapacity(int size) 更改包裹的容量(当前可用空间)。 |
final void |
setDataPosition(int pos) 移动宗地中的当前读/写位置。 |
final void |
setDataSize(int size) 更改宗地中的数据量。 |
final void |
unmarshall(byte[] data, int offset, int length) 将数据中的字节设置为该宗地的原始字节。 |
final void |
writeArray(Object[] val) 在当前dataPosition()中将对象数组展平成parcel,如果需要的话可以增加dataCapacity()。 |
final void |
writeBinderArray(IBinder[] val) |
final void |
writeBinderList(List<IBinder> val) 如果需要,将包含IBinder对象的列表展平到parcel,当前dataPosition()和增长的dataCapacity()。 |
final void |
writeBooleanArray(boolean[] val) |
final void |
writeBundle(Bundle val) 在当前dataPosition()中将Bundle平铺到宗地中,如果需要,则增加dataCapacity()。 |
final void |
writeByte(byte val) 在当前的dataPosition()中将一个字节值写入parcel,如果需要,则增加dataCapacity()。 |
final void |
writeByteArray(byte[] b) 在当前的 |
final void |
writeByteArray(byte[] b, int offset, int len) 在当前的 |
final void |
writeCharArray(char[] val) |
final void |
writeDouble(double val) 在当前的dataPosition()中将一个双精度浮点值写入parcel,如果需要,则增加dataCapacity()。 |
final void |
writeDoubleArray(double[] val) |
final void |
writeException(异常 e) 用于在包裹头部写入异常结果的特殊功能,用于从事务中返回异常时使用。 |
final void |
writeFileDescriptor(FileDescriptor val) 将FileDescriptor写入当前dataPosition()中的parcel,如果需要,则增加dataCapacity()。 |
final void |
writeFloat(float val) 在当前dataPosition()中将浮点值写入parcel,如果需要,则增加dataCapacity()。 |
final void |
writeFloatArray(float[] val) |
final void |
writeInt(int val) 在当前dataPosition()中将整数值写入parcel,如果需要,则增加dataCapacity()。 |
final void |
writeIntArray(int[] val) |
final void |
writeInterfaceToken(String interfaceName) 在当前 |
final void |
writeList(List val) 在当前dataPosition()中将列表平铺到宗地中,如果需要,可以增加dataCapacity()。 |
final void |
writeLong(long val) 在当前dataPosition()中将长整数值写入parcel,如果需要,则增加dataCapacity()。 |
final void |
writeLongArray(long[] val) |
final void |
writeMap(Map val) 请改用 |
final void |
writeNoException() 用于在包裹前面写入信息的特殊功能,表示没有发生异常。 |
final void |
writeParcelable(Parcelable p, int parcelableFlags) 将Parcelable的类名称及其内容拼合到宗地中。 |
final <T extends Parcelable> void |
writeParcelableArray(T[] value, int parcelableFlags) 将不同类型的Parcelable对象写入Parcel。 |
final void |
writePersistableBundle(PersistableBundle val) 在当前dataPosition()处将PersistableBundle展平到包裹中,如果需要,则增加dataCapacity()。 |
final void |
writeSerializable(Serializable s) 将通用可序列化对象写入Parcel。 |
final void |
writeSize(Size val) 在当前dataPosition()中将大小平铺到宗地中,如果需要,则增加dataCapacity()。 |
final void |
writeSizeF(SizeF val) 在当前的dataPosition()中将一个SizeF展平到parcel中,如果需要的话可以增加dataCapacity()。 |
final void |
writeSparseArray(SparseArray<Object> val) 如果需要,将通用SparseArray平铺到当前dataPosition()的parcel中,并增加dataCapacity()。 |
final void |
writeSparseBooleanArray(SparseBooleanArray val) |
final void |
writeString(String val) 在当前dataPosition()中将字符串值写入parcel,如果需要,则增加dataCapacity()。 |
final void |
writeStringArray(String[] val) |
final void |
writeStringList(List<String> val) 将包含字符串对象的列表平铺到当前dataPosition()的parcel中,并在需要时增大dataCapacity()。 |
final void |
writeStrongBinder(IBinder val) 在当前dataPosition()中将对象写入parcel,如果需要,则增加dataCapacity()。 |
final void |
writeStrongInterface(IInterface val) 在当前dataPosition()中将对象写入parcel,如果需要,则增加dataCapacity()。 |
final <T extends Parcelable> void |
writeTypedArray(T[] val, int parcelableFlags) 如果需要,将包含特定对象类型的异构数组展开到parcel,当前dataPosition()和增长的dataCapacity()。 |
final <T extends Parcelable> void |
writeTypedList(List<T> val) 如果需要,将包含特定对象类型的List平铺到当前dataPosition()的parcel中,并逐渐增大dataCapacity()。 |
final <T extends Parcelable> void |
writeTypedObject(T val, int parcelableFlags) 将Parcelable对象拼合到宗地中。 |
final void |
writeValue(Object v) 将通用对象平铺到宗地中。 |
Protected methods |
|
---|---|
void |
finalize() 当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
void appendFrom (Parcel parcel, int offset, int length)
Parameters | |
---|---|
parcel |
Parcel
|
offset |
int
|
length |
int
|
ArrayList<IBinder> createBinderArrayList ()
从当前dataPosition()处使用writeBinderList(List
编写的writeBinderList(List
中读取并返回包含IBinder对象的新ArrayList对象。 如果先前写入的列表对象为null,则返回null。
Returns | |
---|---|
ArrayList<IBinder> |
A newly created ArrayList containing strings with the same data as those that were previously written. |
也可以看看:
ArrayList<String> createStringArrayList ()
从当前dataPosition()中用writeStringList(List
写入的包中读取并返回一个包含String对象的新ArrayList。 如果先前写入的列表对象为null,则返回null。
Returns | |
---|---|
ArrayList<String> |
A newly created ArrayList containing strings with the same data as those that were previously written. |
也可以看看:
T[] createTypedArray (Creator<T> c)
从当前dataPosition()中的parcel中读取并返回一个包含特定对象类型的新数组。 如果先前写入的数组为null,则返回null。 该数组必须先前通过writeTypedArray(T[], int)
写入相同的对象类型。
Parameters | |
---|---|
c |
Creator
|
Returns | |
---|---|
T[] |
A newly created array containing objects with the same data as those that were previously written. |
也可以看看:
ArrayList<T> createTypedArrayList (Creator<T> c)
从当前dataPosition()中用writeTypedList(List
编写的writeTypedList(List
中读取并返回包含特定对象类型的新ArrayList。 如果先前写入的列表对象为null,则返回null。 该列表必须先前通过writeTypedList(List
写入相同的对象类型。
Parameters | |
---|---|
c |
Creator
|
Returns | |
---|---|
ArrayList<T> |
A newly created ArrayList containing objects with the same data as those that were previously written. |
也可以看看:
int dataAvail ()
返回剩余要从宗地中读取的数据量。 那就是dataSize()
- dataPosition()
。
Returns | |
---|---|
int |
int dataCapacity ()
返回宗地中的空间总量。 这总是> = dataSize()
。 它和dataSize()之间的差异是在包裹需要重新分配其数据缓冲区之前剩余的空间量。
Returns | |
---|---|
int |
void enforceInterface (String interfaceName)
Parameters | |
---|---|
interfaceName |
String
|
boolean hasFileDescriptors ()
报告包裹是否包含任何编组文件描述符。
Returns | |
---|---|
boolean |
byte[] marshall ()
返回宗地的原始字节。
您在此处检索的数据不得放置在任何类型的永久存储器中(在本地磁盘上,在网络中等)。 为此,您应该使用标准序列化或其他类型的通用序列化机制。 地块编组表示针对本地IPC进行了高度优化,因此不会尝试保持与在不同版本的平台中创建的数据的兼容性。
Returns | |
---|---|
byte[] |
Object[] readArray (ClassLoader loader)
在当前dataPosition()中从包中读取并返回一个新的Object数组。 如果先前写入的数组为null,则返回null。 给定的类加载器将用于加载任何封装的可读文件。
Parameters | |
---|---|
loader |
ClassLoader
|
Returns | |
---|---|
Object[] |
ArrayList readArrayList (ClassLoader loader)
从当前dataPosition()的parcel中读取并返回一个新的ArrayList对象。 如果先前写入的列表对象为null,则返回null。 给定的类加载器将用于加载任何封装的可读文件。
Parameters | |
---|---|
loader |
ClassLoader
|
Returns | |
---|---|
ArrayList |
void readBinderList (List<IBinder> list)
读入在当前dataPosition()中使用 writeBinderList(List
写入的给定列表项IBinder对象。
Parameters | |
---|---|
list |
List
|
Returns | |
---|---|
void |
A newly created ArrayList containing strings with the same data as those that were previously written. |
也可以看看:
Bundle readBundle ()
从当前dataPosition()的parcel中读取并返回一个新的Bundle对象。 如果先前编写的Bundle对象为null,则返回null。
Returns | |
---|---|
Bundle |
Bundle readBundle (ClassLoader loader)
从当前dataPosition()的parcel中读取并返回一个新的Bundle对象,使用给定的类加载器来初始化Bundle的类加载器,以便以后检索Parcelable对象。 如果先前编写的Bundle对象为null,则返回null。
Parameters | |
---|---|
loader |
ClassLoader
|
Returns | |
---|---|
Bundle |
void readByteArray (byte[] val)
从包中读取一个byte []对象并将其复制到给定的字节数组中。
Parameters | |
---|---|
val |
byte
|
void readException ()
用于从包裹头部读取异常结果的特殊功能,用于在收到交易结果后使用。 如果它已被写入包裹,这将为您抛出异常,否则返回并让您从包中读取正常结果数据。
void readException (int code, String msg)
抛出给定消息的异常。 不打算在Parcel类之外使用。
Parameters | |
---|---|
code |
int : Used to determine which exception class to throw. |
msg |
String : The exception message. |
ParcelFileDescriptor readFileDescriptor ()
从当前dataPosition()的parcel中读取FileDescriptor。
Returns | |
---|---|
ParcelFileDescriptor |
HashMap readHashMap (ClassLoader loader)
请使用 readBundle(ClassLoader)
代替(其数据必须用 writeBundle(Bundle)
写入),使用给定的类加载器读取并从当前dataPosition()中的parcel返回一个新的HashMap对象,以加载任何封闭的Parcelables。如果先前编写的映射对象返回null为空。
Parameters | |
---|---|
loader |
ClassLoader
|
Returns | |
---|---|
HashMap |
void readList (List outVal, ClassLoader loader)
从当前dataPosition()的parcel中读取现有的List对象,使用给定的类加载器加载任何封闭的Parcelables。 如果它为空,则使用默认的类加载器。
Parameters | |
---|---|
outVal |
List
|
loader |
ClassLoader
|
void readMap (Map outVal, ClassLoader loader)
请使用 readBundle(ClassLoader)
代替(其数据必须被写入与 writeBundle(Bundle)
在当前dataPosition阅读到现有的Map对象从包裹()。
Parameters | |
---|---|
outVal |
Map
|
loader |
ClassLoader
|
T readParcelable (ClassLoader loader)
从包裹中读取并返回一个新的Parcelable。 给定的类加载器将用于加载任何封装的可读文件。 如果它为空,将使用默认的类加载器。
Parameters | |
---|---|
loader |
ClassLoader : A ClassLoader from which to instantiate the Parcelable object, or null for the default class loader. |
Returns | |
---|---|
T |
Returns the newly created Parcelable, or null if a null object has been written. |
Throws | |
---|---|
BadParcelableException |
Throws BadParcelableException if there was an error trying to instantiate the Parcelable. |
Parcelable[] readParcelableArray (ClassLoader loader)
从包裹中读取并返回一个新的Parcelable数组。 给定的类加载器将用于加载任何封装的可读文件。
Parameters | |
---|---|
loader |
ClassLoader
|
Returns | |
---|---|
Parcelable[] |
the Parcelable array, or null if the array is null |
PersistableBundle readPersistableBundle ()
从当前dataPosition()的parcel中读取并返回一个新的Bundle对象。 如果先前编写的Bundle对象为null,则返回null。
Returns | |
---|---|
PersistableBundle |
PersistableBundle readPersistableBundle (ClassLoader loader)
从当前dataPosition()的parcel中读取并返回一个新的Bundle对象,使用给定的类加载器来初始化Bundle的类加载器,以便以后检索Parcelable对象。 如果先前编写的Bundle对象为null,则返回null。
Parameters | |
---|---|
loader |
ClassLoader
|
Returns | |
---|---|
PersistableBundle |
Serializable readSerializable ()
从包中读取并返回一个新的Serializable对象。
Returns | |
---|---|
Serializable |
the Serializable object, or null if the Serializable name wasn't found in the parcel. |
SparseArray readSparseArray (ClassLoader loader)
从当前dataPosition()的parcel中读取并返回一个新的SparseArray对象。 如果先前写入的列表对象为null,则返回null。 给定的类加载器将用于加载任何封装的可读文件。
Parameters | |
---|---|
loader |
ClassLoader
|
Returns | |
---|---|
SparseArray |
SparseBooleanArray readSparseBooleanArray ()
从当前dataPosition()的parcel中读取并返回一个新的SparseBooleanArray对象。 如果先前写入的列表对象为null,则返回null。
Returns | |
---|---|
SparseBooleanArray |
void readStringList (List<String> list)
读入在当前dataPosition()处使用 writeStringList(List
写入的给定列表项目字符串对象。
Parameters | |
---|---|
list |
List
|
Returns | |
---|---|
void |
A newly created ArrayList containing strings with the same data as those that were previously written. |
也可以看看:
IBinder readStrongBinder ()
从当前dataPosition()的地块中读取一个对象。
Returns | |
---|---|
IBinder |
void readTypedArray (T[] val, Creator<T> c)
Parameters | |
---|---|
val |
T
|
c |
Creator
|
void readTypedList (List<T> list, Creator<T> c)
读入包含在当前dataPosition()处使用writeTypedList(List
编写的特定对象类型的给定List列表项。 该列表必须先前通过writeTypedList(List
以相同的对象类型书写。
Parameters | |
---|---|
list |
List
|
c |
Creator
|
Returns | |
---|---|
void |
A newly created ArrayList containing objects with the same data as those that were previously written. |
也可以看看:
T readTypedObject (Creator<T> c)
从parcel中读取并返回一个类型化的Parcelable对象。 如果先前写入的对象为null,则返回null。 该对象必须先前通过writeTypedObject(T, int)
写入相同的对象类型。
Parameters | |
---|---|
c |
Creator
|
Returns | |
---|---|
T |
A newly created object of the type that was previously written. |
也可以看看:
Object readValue (ClassLoader loader)
从包裹中读取输入的对象。 给定的类加载器将用于加载任何封装的可读文件。 如果它为空,将使用默认的类加载器。
Parameters | |
---|---|
loader |
ClassLoader
|
Returns | |
---|---|
Object |
void setDataCapacity (int size)
更改包裹的容量(当前可用空间)。
Parameters | |
---|---|
size |
int : The new capacity of the parcel, in bytes. Can not be less than dataSize() -- that is, you can not drop existing data with this method. |
void setDataPosition (int pos)
移动宗地中的当前读/写位置。
Parameters | |
---|---|
pos |
int : New offset in the parcel; must be between 0 and dataSize() . |
void setDataSize (int size)
更改宗地中的数据量。 可以小于或大于当前大小。 如果大于当前容量,将分配更多内存。
Parameters | |
---|---|
size |
int : The new number of bytes in the Parcel. |
void unmarshall (byte[] data, int offset, int length)
将数据中的字节设置为该宗地的原始字节。
Parameters | |
---|---|
data |
byte
|
offset |
int
|
length |
int
|
void writeArray (Object[] val)
在当前dataPosition()中将对象数组展平成parcel,如果需要的话可以增加dataCapacity()。 数组值使用writeValue(Object)
写入,并且必须遵循那里的规范。
Parameters | |
---|---|
val |
Object
|
void writeBinderList (List<IBinder> val)
如果需要,将包含IBinder对象的列表展平到parcel,当前dataPosition()和增长的dataCapacity()。 他们以后可以通过createBinderArrayList()
或readBinderList(List
进行检索。
Parameters | |
---|---|
val |
List : The list of strings to be written. |
void writeBooleanArray (boolean[] val)
Parameters | |
---|---|
val |
boolean
|
void writeBundle (Bundle val)
在当前dataPosition()中将Bundle平铺到宗地中,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
Bundle
|
void writeByte (byte val)
在当前的dataPosition()中将一个字节值写入parcel,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
byte
|
void writeByteArray (byte[] b)
在当前 dataPosition()
的地块中写入一个字节数组,如果需要的 dataPosition()
,增加 dataCapacity()
。
Parameters | |
---|---|
b |
byte : Bytes to place into the parcel. |
void writeByteArray (byte[] b, int offset, int len)
在当前的 dataPosition()
一个字节数组写入包裹,如果需要的 dataPosition()
,增加 dataCapacity()
。
Parameters | |
---|---|
b |
byte : Bytes to place into the parcel. |
offset |
int : Index of first byte to be written. |
len |
int : Number of bytes to write. |
void writeDouble (double val)
在当前的dataPosition()中将一个双精度浮点值写入parcel,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
double
|
void writeException (异常 e)
用于在包裹头部写入异常结果的特殊功能,用于从事务中返回异常时使用。 请注意,目前这只支持一些异常类型; 任何其他异常将被此函数作为RuntimeException重新抛出(在分派事务时被系统的最后一个异常处理捕获)。
支持的异常类型是:
BadParcelableException
IllegalArgumentException
IllegalStateException
NullPointerException
SecurityException
NetworkOnMainThreadException
Parameters | |
---|---|
e |
异常 : The Exception to be written. |
void writeFileDescriptor (FileDescriptor val)
将FileDescriptor写入当前dataPosition()中的parcel,如果需要,则增加dataCapacity()。
文件描述符不会被关闭,当从Binder调用返回对象时,这可能导致文件描述符泄漏。 改为使用writeToParcel(Parcel, int)
,它接受上下文标志,如果设置了PARCELABLE_WRITE_RETURN_VALUE
,将关闭原始文件描述符。
Parameters | |
---|---|
val |
FileDescriptor
|
void writeFloat (float val)
在当前dataPosition()中将浮点值写入parcel,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
float
|
void writeInt (int val)
在当前dataPosition()中将整数值写入parcel,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
int
|
void writeInterfaceToken (String interfaceName)
在当前的dataPosition()
的地块中存储或读取IBinder界面令牌。 这用于验证编组事务是针对目标接口的。
Parameters | |
---|---|
interfaceName |
String
|
void writeList (List val)
在当前dataPosition()中将列表平铺到宗地中,如果需要,可以增加dataCapacity()。 列表值使用writeValue(Object)
编写,并且必须遵循该规范。
Parameters | |
---|---|
val |
List
|
void writeLong (long val)
在当前dataPosition()中将长整数值写入parcel,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
long
|
void writeMap (Map val)
请改用writeBundle(Bundle)
。 在当前dataPosition()中将Map平铺到包中,如果需要,则增加dataCapacity()。 Map键必须是String对象。 地图值使用writeValue(Object)
编写,并且必须遵循那里的规范。
强烈建议使用 writeBundle(Bundle)
而不是此方法,因为Bundle类提供了一个类型安全的API,它允许您在编组时避免神秘的类型错误。
Parameters | |
---|---|
val |
Map
|
void writeParcelable (Parcelable p, int parcelableFlags)
将Parcelable的类名称及其内容拼合到宗地中。
Parameters | |
---|---|
p |
Parcelable : The Parcelable object to be written. |
parcelableFlags |
int : Contextual flags as per Parcelable.writeToParcel() . |
void writeParcelableArray (T[] value, int parcelableFlags)
将不同类型的Parcelable对象写入Parcel。 数组中的每个对象都与其类名一起写入,以便稍后可以实例化正确的类。 因此,这比writeTypedArray(T[], int)
开销要writeTypedArray(T[], int)
,但会正确处理包含多种类型对象的数组。
Parameters | |
---|---|
value |
T : The array of objects to be written. |
parcelableFlags |
int : Contextual flags as per Parcelable.writeToParcel() . |
也可以看看:
void writePersistableBundle (PersistableBundle val)
在当前dataPosition()处将PersistableBundle展平到包裹中,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
PersistableBundle
|
void writeSerializable (Serializable s)
将通用可序列化对象写入Parcel。 强烈建议避免使用此方法,因为序列化开销非常大,并且这种方法比使用其他方法将数据写入Parcel时要慢得多。
Parameters | |
---|---|
s |
Serializable
|
void writeSize (Size val)
在当前dataPosition()中将大小平铺到宗地中,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
Size
|
void writeSizeF (SizeF val)
在当前的dataPosition()中将一个SizeF展平到parcel中,如果需要的话可以增加dataCapacity()。
Parameters | |
---|---|
val |
SizeF
|
void writeSparseArray (SparseArray<Object> val)
如果需要,将通用SparseArray平铺到当前dataPosition()的parcel中,并增加dataCapacity()。 SparseArray值使用writeValue(Object)
编写,并且必须遵循该规范。
Parameters | |
---|---|
val |
SparseArray
|
void writeSparseBooleanArray (SparseBooleanArray val)
Parameters | |
---|---|
val |
SparseBooleanArray
|
void writeString (String val)
在当前dataPosition()中将字符串值写入parcel,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
String
|
void writeStringList (List<String> val)
将包含字符串对象的列表平铺到当前dataPosition()的parcel中,并在需要时增大dataCapacity()。 稍后可以用createStringArrayList()
或readStringList(List
检索它们。
Parameters | |
---|---|
val |
List : The list of strings to be written. |
void writeStrongBinder (IBinder val)
在当前dataPosition()中将对象写入parcel,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
IBinder
|
void writeStrongInterface (IInterface val)
在当前dataPosition()中将对象写入parcel,如果需要,则增加dataCapacity()。
Parameters | |
---|---|
val |
IInterface
|
void writeTypedArray (T[] val, int parcelableFlags)
如果需要,将包含特定对象类型的异构数组展开到parcel,当前dataPosition()和增长的dataCapacity()。 数组中对象的类型必须是实现Parcelable的类型。 然而,与writeParcelableArray(T[], int)
方法不同,只有对象的原始数据被写入,而不是它们的类型,所以您必须使用readTypedArray(T[], Parcelable.Creator
和正确的对应Parcelable.Creator
实现来解组它们。
Parameters | |
---|---|
val |
T : The array of objects to be written. |
parcelableFlags |
int : Contextual flags as per Parcelable.writeToParcel() . |
void writeTypedList (List<T> val)
如果需要,将包含特定对象类型的List平铺到当前dataPosition()的parcel中,并逐渐增大dataCapacity()。 列表中的对象类型必须是实现Parcelable的类型。 然而,与通用的writeList()方法不同,只有对象的原始数据被写入,而不是它们的类型,所以您必须使用相应的readTypedList()来解组它们。
Parameters | |
---|---|
val |
List : The list of objects to be written. |
void writeTypedObject (T val, int parcelableFlags)
将Parcelable对象拼合到宗地中。
Parameters | |
---|---|
val |
T : The Parcelable object to be written. |
parcelableFlags |
int : Contextual flags as per Parcelable.writeToParcel() . |
void writeValue (Object v)
将通用对象平铺到宗地中。 给定的对象值当前可以是以下类型之一:
Bundle
writeMap(Map)
). Parcelable
protocol. writeToParcel(CharSequence, Parcel, int)
). writeList(List)
). SparseArray
(as supported by writeSparseArray(SparseArray)
). IBinder
writeSerializable(Serializable)
for caveats). Note that all of the previous types have relatively efficient implementations for writing to a Parcel; having to rely on the generic serialization approach is much less efficient and should be avoided whenever possible. Parcelable
对象写入与 writeToParcel(Parcel, int)
使用的0上下文标志当序列包含对象 ParcelFileDescriptor
S,这可能会导致文件描述符泄漏时它们返回从活页夹调用(其中 PARCELABLE_WRITE_RETURN_VALUE
应当被使用)。
Parameters | |
---|---|
v |
Object
|
void finalize ()
当垃圾收集确定没有更多对该对象的引用时,由对象上的垃圾回收器调用。 一个子类覆盖了finalize
方法来处置系统资源或执行其他清理。
的常规协定finalize
是,它被调用,如果当在Java TM虚拟机已确定不再有由该目的可以通过还没有死亡,除了作为一个动作的结果的任何线程访问的任何手段取决于某些其他可以完成的对象或类别的最终定稿。 finalize
方法可以采取任何行动,包括使该对象再次可用于其他线程; 然而, finalize
的通常目的是在对象被不可撤销地丢弃之前执行清理操作。 例如,表示输入/输出连接的对象的finalize方法可能会执行显式I / O事务,以在永久丢弃该对象之前中断连接。
类finalize
方法Object
执行特殊操作; 它只是正常返回。 Object
子类可能会覆盖此定义。
Java编程语言不保证哪个线程将为任何给定对象调用finalize
方法。 但是,保证调用finalize的线程在调用finalize时不会保留任何用户可见的同步锁。 如果finalize方法引发未捕获的异常,则忽略该异常,并终止该对象的终止。
在针对某个对象调用 finalize
方法后,将不会采取进一步的操作,直到Java虚拟机再次确定没有任何方式可以通过任何尚未死亡的线程访问此对象,包括可能的操作通过准备完成的其他对象或类别,此时该对象可能被丢弃。
对于任何给定的对象,Java虚拟机从不会多次调用 finalize
方法。
finalize
方法引发的任何异常 finalize
导致此对象的终止停止,但会被忽略。
Throws | |
---|---|
Throwable |