Phone与Rild连接过程及消息收发

本文详细介绍了Android中Phone进程与Rild的连接过程,包括RILReceiver如何建立连接并接收RILD消息,以及RILSender如何发送消息。在Phone启动后,RIL在PhoneFactory创建时初始化,每个RIL对应一个卡并与Rild建立连接。RILReceiver通过循环读取socket数据,而RILSender使用Handler发送消息到RILD,并处理WAKE_LOCK_TIMEOUT事件。
摘要由CSDN通过智能技术生成

之前一篇文章中分析了RILD及qcril初始化流程,已经讲过RILD中建立socket服务和接受上层client连接的过程。现在来看下客户端——Phone进程,如何与rild socket建立连接和收发消息。

这里写图片描述

1. 连接Rild 和消息的接收

开机Phone进程启动后,Ril在PhoneFactory::makeDefaultPhone的时候被创建,并对应着Phone实例的数量,双卡机会有2个RIL各自与Rild关联并各自负责一个卡的业务。

public static void makeDefaultPhone(Context context) {
        synchronized (sLockProxyPhones) {
            ...
            //
            for (int i = 0; i < numPhones; i++) {
                ...
                //创建RIL实例
                sCommandsInterfaces[i] = new RIL(context, networkModes[i], cdmaSubscription, i);
            }
            //创建Phone实例
            for (int i = 0; i < numPhones; i++) {
                PhoneBase phone = null;
                // int phoneType =
                // TelephonyManager.getPhoneType(networkModes[i]);
                if (phoneType == PhoneConstants.PHONE_TYPE_GSM) {
                    phone = TelephonyPluginDelegate.getInstance().makeGSMPhone(context, sCommandsInterfaces[i],
                            sPhoneNotifier, i);
                } else if (phoneType == PhoneConstants.PHONE_TYPE_CDMA) {
                    phone = TelephonyPluginDelegate.getInstance().makeCDMALTEPhone(context, sCommandsInterfaces[i],
                            sPhoneNotifier, i);
                }

                sProxyPhones[i] = TelephonyPluginDelegate.getInstance().makePhoneProxy(phone);
            }
        }
    }

以下是RIL.java中定义的与Socket连接有关的成员,有Socket、各自负责收发的2个类实例 和 提供给它们运行的子线程。

public final class RIL extends BaseCommands implements CommandsInterface {
   
    ...
    //与rild连接的socket
    LocalSocket mSocket;
    //负责发送消息的线程
    HandlerThread mSenderThread;
    //实现发送消息的Handler
    RILSender mSender;
    //负责接收消息的线程
    Thread mReceiverThread;
    //实现接收消息的类,实现了Runnable
    RILReceiver mReceiver;

    //保存Request消息列表
    Sparse
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值