数据业务建立流程之发起网络连接过程(原)

本文详细阐述了数据业务建立的三个阶段:触发阶段、准备连接阶段和发送连接命令阶段,涉及DcTracker、RILJ及底层信令交互过程。
摘要由CSDN通过智能技术生成
        经过前面 这些过程,网络连接所需要的条件就全部准备就绪,接下来就是等待网络接入。
        我们把网络接入过程简单分为三个阶段:
        触发阶段
            ----该阶段是由各种不同事件触发的,比如 SIM载入完毕PS域Attach成功通话结束APN改变等,该阶段的最终都是要调用setupDataOnConnectableApns()方法;
        准备连接阶段
            ----该阶段是指,在DcTracker收到建立连接的请求之后,需要进行一系列有效性检测,比如 APN是否已经激活PS是否已经就绪用户是否打开网络开关等,然后创建DataConnection()对象,准备发起连接请求;
        发送连接命令阶段

            ----该阶段是指,在DataConnection收到DcTracker的请求之后,将请求转交给RILJ的过程,经过该阶段后,请求就发送到了RIL以及Modem层,由底层完成信令的发送和接收;


一、触发阶段


        有多种事件可以触发网络接入过程,具体来说分为以下几个原因:
        //漫游相关
        static final String REASON_ROAMING_ON = "roamingOn";
        static final String REASON_ROAMING_OFF = "roamingOff";
        //PS attach
        static final String REASON_DATA_ATTACHED = "dataAttached";
        //APN改变
        static final String REASON_APN_CHANGED = "apnChanged";
        //通话结束
        static final String REASON_VOICE_CALL_ENDED = "2GVoiceCallEnded";
        //SIM载入完毕
        static final String REASON_SIM_LOADED = "simLoaded";
        //网络模式改变
        static final String REASON_NW_TYPE_CHANGED = "nwTypeChanged";
        我们挑选最常见的REASON_DATA_ATTACHED原因来分析网络连接的发起过程。
        什么是 Data Attach事件呢?其实就是手机的 PS域Attach成功,而PS域是和CS域相对应,简单来说,手机(2G/3G)打电话是在CS域上进行,而数据流量是在PS域上进行,PS域附着(Attach)成功之后才可以发起数据激活的信令,然后才可以上网,默认状态下,手机开机后就会发起PS附着的信令给网络,附着成功之后将会接到成功的消息,由于DcTracker当初初始化时在registerForAllEvents()中注册了Attach的监听器:
        protected void registerForAllEvents() {
            //监听是否PS域Attach状态
            mPhone.getServiceStateTracker().registerForDataConnectionAttached(this, DctConstants.EVENT_DATA_CONNECTION_ATTACHED, null);
        }
        因此当PS域Attach成功之后,将会收到EVENT_DATA_CONNECTION_ATTACHED消息:
        public void handleMessage (Message msg) {
            switch (msg.what) {
                case DctConstants.EVENT_DATA_CONNECTION_ATTACHED:
                    onDataConnectionAttached();
                    break;
            }
        }
        继续:
        private void onDataConnectionAttached() {
            mAttached.set(true);
            if (getOverallState() == DctConstants.State.CONNECTED) {
                //已经处于连接状态
                startNetStatPoll();
                startDataStallAlarm(DATA_STALL_NOT_SUSPECTED);
                notifyDataConnection(Phone.REASON_DATA_ATTACHED);
            } else {
                //初始化后应该处于IDLE状态
                notifyOffApnsOfAvailability(Phone.REASON_DATA_ATTACHED);
            }
            if (mAutoAttachOnCreationConfig) {
                mAutoAttachOnCreation = true;
            }
            setupDataOnConnectableApns(Phone.REASON_DATA_ATTACHED);
        }
        当前的连接状态是IDLE,因此会将REASON_DATA_ATTACHED的参数传
  • 5
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值