这个类用来与ril层进行通信的
比如我要接听一个电话,通过层层调用到RIL.java里面的方法,mCT.acceptCall (Message result)
929 public void
930 acceptCall (Message result) {
931 RILRequest rr
932 = RILRequest.obtain(RIL_REQUEST_ANSWER, result);
933
934 if (RILJ_LOGD) riljLog(rr.serialString() + "> " + requestToString(rr.mRequest));
935
936 send(rr);
937 }
首先形成一个RIL请求,注意里面的RIL_REQUEST_ANSWER,这是一个信号名称,然后调用send(rr);
2072 private void
2073 send(RILRequest rr) {
2074 Message msg;
2075
2076 msg = mSender.obtainMessage(EVENT_SEND, rr);
2077
2078 acquireWakeLock();
2079
2080 msg.sendToTarget();
2081 }
这个函数把RIL请求发给mSender,是一个RILSender类对象,用来发送ril请求的,还有个RILReceiver类,用来接收下面发上来的ril回应
RILSender extends Handler implements Runnable
收到EVENT_SEND信息之后调用handleMessage()
mRequestsList.add(rr); 把请求存进请求列表,这样在RILReceiver接收回应的时候,找到该请求进行通知
data = rr.mp.marshall(); 将请求转换成字节流
s.getOutputStream().write(data);将请求写入socket
而在RILReceiver类里面
520 for (;;) {
521 Parcel p;
522
523 length = readRilMessage(is, buffer);
524
525 if (length < 0) {
526 // End-of-stream reached
527 break;
528 }
529
530 p = Parcel.obtain();
531 p.unmarshall(buffer, 0, length);
532 p.setDataPosition(0);
533
534 //Log.v(LOG_TAG, "Read packet: " + length + " bytes");
535
536 processResponse(p);
537 p.recycle();
538 }
不断的从socket里面读数据,然后进行结构化诚Parcel对象p,调用processResponse(p)去处理回应, 若得到的回应有效调用processSolicited (p);
在那里面,根据serial = p.readInt();找到原先的请求,也就是RILRequest对象,从请求列表里面删除
然后找到rr.mRequest为RIL_QUESET_ANSER进行处理,然后
2264 AsyncResult.forMessage(rr.mResult, null, tr);
2265 rr.mResult.sendToTarget();
这样就完成了处理整个过程了