**
RILRequest.obtain()
**
class RILRequest {
static final String LOG_TAG = "RilRequest";
//***** Class Variables
static Random sRandom = new Random();
static AtomicInteger sNextSerial = new AtomicInteger(0);
private static Object sPoolSync = new Object();
private static RILRequest sPool = null;
private static int sPoolSize = 0;
private static final int MAX_POOL_SIZE = 4;
private Context mContext;
//***** Instance Variables
int mSerial;
int mRequest;
Message mResult;
Parcel mParcel;
RILRequest mNext;
int mWakeLockType;
// time in ms when RIL request was made
long mStartTimeMs;
/**
* Retrieves a new RILRequest instance from the pool.
*
* @param request RIL_REQUEST_*
* @param result sent when operation completes
* @return a RILRequest instance from the pool.
*/
static RILRequest obtain(int request, Message result) {
RILRequest rr = null;
synchronized(sPoolSync) {{//池什么时候进行的初始化
if (sPool != null) {
rr = sPool;
sPool = rr.mNext;
rr.mNext = null;
sPoolSize--;
}
}
if (rr == null) {
rr = new RILRequest();//构建
}
rr.mSerial = sNextSerial.getAndIncrement();//同步递增的序列号
rr.mRequest = request;//请求关键字,类似RIL_REQUEST_SET_MUTE---RIL_REQUEST_*
rr.mResult = result;//Message对象,后续msg.sendToTarget进行handle处理,谁创建的Message就由谁来处理
rr.mParcel = Parcel.obtain();//Parcel对象,存储数据(序列化)
rr.mWakeLockType = RIL.INVALID_WAKELOCK;
rr.mStartTimeMs = SystemClock.elapsedRealtime();
if (result != null && result.getTarget() == null) {
throw new NullPointerException("Message target must not be null");
}
// first elements in any RIL Parcel每一个Parcel的前两个元素数据--请求类型和序列号
rr.mParcel.writeInt(request);//用来判断Unsolited还是solited
rr.mParcel.writeInt(rr.mSerial);
return rr;
}
}