Android6.0的phone应用源码分析(7)——RIL层框架分析2

来源:互联网 发布:typescript 调用js 编辑:程序博客网 时间:2024/05/16 18:01

这里再次 将Android6.0的phone应用源码分析(5)中最后的流向图拿出来


从图中可以看到RILJ通过RILD向MODEM发送命令后,接受response是通过readerLoop异步进行的(?好像并不是异步,虽然在不同线程,但是加锁了,执行情况和同步基本一样啊)。这就存在一个问题:RILJ怎么识别response对应哪一个request?并且这个response返回给谁?

从下图中可以看到,Andorid上层在RILJ新建一个RILRequst之前就已经率先新建了一个用于存放结果的result作为RILRequest的成员变量。这样当RILJ接收到response时就可以通过这个result传递到正确的命令发起者。而在RILJ层又为每个RILRquest指定了一个serial,当RILJ收到RILD的response时可以通过serial查表找到response匹配的RILRequest。在RILD层,则是依据serial生成token封装成parcel,下发至Modem。Modem处理后携带token返回parcel回RILD。RILD接收parcel后解析出token,以这个token作为参数封装成包含response信息Parcel包,token在RILJ中被还原成回serial。以此serial查询RILRequestList得到匹配的RILRequest。最终RILJ在通过rr.mResult.sendToTarget()将结果返回至命令发起者。



0 0