android froyo framework内RIL.java类分析

本文深入探讨了RIL层通信机制,详细解释了如何通过RIL.java内部的方法实现与ril层的交互,包括请求的形成、发送以及响应的接收处理流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


这个类用来与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();
这样就完成了处理整个过程了


这个类用来与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();
这样就完成了处理整个过程了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值