请注意,以上步骤中并没有将事件添加到事件队列(timer_list)中的部分,但是ril_event_loop的运作就是要基于timer_list的,那事件队列不是空的吗?怎么会这样呢?
在查看了相关代码之后,发现了有一个叫ril_timer_add的函数执行了addToList函数,即猜测应该是某个函数调用了ril_timer_add?是什么函数呢?通过用Source Insight查找函数的caller,发现了internalRequestTimedCallback函数调用了ril_timer_add。从名字我想起了关键一点:当前流程只是用来“处理”电话事件而已,并不是自己生成一个电话事件啊,电话事件应该是由此流程外的对象生成的(比如有来电了,又如要打电话了),用中断来进行事件队列的事件添加。
到此为止,我们已经确认了rild的主要监听功能就是在ril_event_loop中:
其中在ril_event_loop的for (;;)循环中,我们看到了if (-1 == calcNextTimeout(&tv)),这里就是在尝试处理电话事件啦^_^。