今天重新看了下RIL,遇到问题去问老马的时候,他分享了一本android内核分析给我,这本书写得好透彻,估计作者将整个android系统从上到下都看过了,太牛了。看了这书后才发现什么是看Code该有的态度。默默回忆下我之前看Code乱七八糟的套路,内心极端鄙视自己。
RILJ
RIL.java相当于RIL的代理,起到消息转发的作用。RILJ一旦和RILD连接成功,就可以向RILD发送请求,RID接到请求后,再将消息转发给Moderm, Moderm进行一系列处理后,将最终结果按原路返回给RILJ。所以对于RILJ来讲,它需要具备发送和响应消息的功能。RILJ的设计者将RIL.java分为三大部分:RILRequest, RILSender, RILReceiver.
RILRequest用于创建新的Request,其中有个比较重要的参数是mSerial,这是一个递增的变量,用来唯一标示一个RILRequest。之所以说它重要,是因为它是从众多的RILRequest找出需要的那个RILRequest的唯一方式。当一个RILRequest发下去之后,底层肯定不会立即响应,有的时候又会有多个RILRequest同时响应,为了解决这个问题,设计者设计了一个RequestList. 在发送一个RILRequest的同时,将一个RR存放在RequestList中,RR中包含有mSerial,所以当消息回来时,系统会去这个RequestList里根据mSerial查下当前是哪个消息响应了,然后再做出响应的动作。
下面这个图是从老马给的书上截下来的,我看过好多遍RIL我都没想着能总结成这么一副图,感谢作者。