1,主动上报电话信息流程分析
和打电话,主动接听,挂断相对应的分别是远程来电,远程挂断电话等等,这时候消息的流程处理刚好相反。
首先接收到消息的是Modem层,然后Medoem再上传给RIL层,RIL进程通过sokcet将消息发送给
RILJ(framework层的RIL),进入RILJ的processUnsolicited方法.当有来电或者远程挂断时, RIL层发送
的是RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息。
RIL.java 的processUnsolicited方法对RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED消息处理逻辑如下,
1,首先获取该消息的结果,
case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED: ret = responseVoid(p); break;
responseVoid方法返回的是null,
private Object
responseVoid(Parcel p) {
return null;
}
2,然后分发消息,
case RIL_UNSOL_RESPONSE_CALL_STATE_CHANGED:
if (RILJ_LOGD) unsljLog(response);
mCallStateRegistrants.notifyRegistrants(new AsyncResult(null, null, null));
break;
Registrants是典型的观察者模式,一旦消息上报,就直接调用注册者。