源码位置
Java层:
Frameworks/base/core/java/android/os/Parcel.java
Jni:
Frameworks/base/core/jni/android_os_Parcel.cpp
Frameworks/base/core/jni/android_os_Parcel.h
实现层:
Frameworks/base/include/binder/parcel.h和Frameworks/base/libs/binder/parcel.cpp
知识点
// ---------------------------------------------------------------------------
// 模板的偏特化和全特化,当传入_exp为false时,找不到对应的模板,编译时报错
#ifdef __cplusplus template<bool> struct CompileTimeAssert;
template<> struct CompileTimeAssert<true> {};
#define COMPILE_TIME_ASSERT(_exp) \
template class CompileTimeAssert< (_exp) >;
#endif
#define COMPILE_TIME_ASSERT_FUNCTION_SCOPE(_exp) \
CompileTimeAssert<( _exp )>();
// ---------------------------------------------------------------------------
Java层Parcel的获取
Parcel parcle = Parcel.Obtain();
mOwnsNativeParcelObject表明mNativePtr是否由当前对象分配,负责它的生命周期。
private static final int POOL_SIZE = 6;
private static final Parcel[] sOwnedPool = new Parcel[POOL_SIZE];
private static final Parcel[] sHolderPool = new Parcel[POOL_SIZE];
Parcel维护了两个Parcel对象池子,recyl