AndroidQ_默认数据连接的建立
默认数据连接创建
创建默认数据连接有两种方式:
- 开机初始化(需要Settings默认数据开关是打开的)
- 用户从Settings UI上手动打开
一, 开机default Data建立的过程:
PhoneApp在启动过程中,有好几次都会调用Dctracker的trySetupData,这个方法最终会向驱使RILJ向RILC发起SETUP_DATA_CALL。这个方法中有个重要的判断isDataAllowed来决定要不要setupData。而dataAllowed只有当收到SSTracker EVENT_DATA_CONNECTION_ATTACHED的消息后,才表示当前可以去setupData了,因为此时SIM卡也已经加载好,APN也已经初始化好。
触发trySetupData的地方,
- DcTracker(constructor)-registerAllEvents->registerServiceStateTrackerEvents->EVENT_DATA_CONNECTION_ATTACHED,->onDataConnectionAttached->setupDataOnAllConnectableApns->(也就是接收到RILJ主动上报:UNSOL_RESPONSE_NETWORK_STATE_CHANGED,然后ServiceStateTracker发出network 状态发生变化, 通知其他模块,比如DcTracker)
此时SIM卡已经loaded完成,data也attached。isDataAllowed为true,可以setupdata了。
KeyLogs:
05-18 14:26:29.352 D/QtiDCT-C( 2185): [0]trySetupData for APN type default, reason: **dataAttached**, requestType=NORMAL. **Data allowed, reason: NORMAL**
05-18 14:26:29.361 D/QtiDCT-C( 2185): [0]**setupData**: dc={DC-QtiDC-1: State=DcInactiveState mApnSetting=null RefCount=0 mCid=-1 mCreateTime=0 mLastastFailTime=0 mLastFailCause=0 mTag=0 mLinkProperties={LinkAddresses: [ ] DnsAddresses: [ ] Domains: null MTU: 0 Routes: [ ]} linkCapabilities=[ Transports: CELLULAR Capabilities: NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_ROAMING&NOT_CONGESTED LinkUpBandwidth>=15000Kbps LinkDnBandwidth>=30000Kbps Specifier: <0>] mRestrictedNetworkOverride=false mApnContexts={}} apnSetting=[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1 gen#=1
- DcTracker(constructor)->update->onUpdateIcc->EVENT_RECORDS_LOADED->onRecordsLoadedOrSubIdChanged->setupDataOnAllConnectableApns.
这个流程触发,必须是SIM加载已经ready。虽然这个时候也会触发trySetupData,但是由于此时数据还没有attached,所以就不会触发setUpData。
KeyLogs:
05-18 14:26:23.874 D/QtiDCT-C( 2185): [0]trySetupData for APN type default, **reason: simLoaded**, requestType=NORMAL. **Data disallowed, reasons: NOT_ATTACHED**
05-18 14:26:23.874 D/QtiDCT-C( 2185): [0]**trySetupData failed.** apnContext = [type=default, mState=IDLE, apnEnabled=true, mDependencyMet=true]
- 还有DcTracker监听到registerServiceStateTrackerEvents->EVENT_DATA_RAT_CHANGED,此时数据也没有attached,所以也不会触发setUpData。
KeyLogs:
05-18 14:26:29.346 D/QtiDCT-C( 2185): [0]trySetupData for APN type default, reason: **nwTypeChanged**, requestType=NORMAL. **Data disallowed, reasons: NOT_ATTACHED**
05-18 14:26:29.346 D/QtiDCT-C( 2185): [0]**trySetupData failed**. apnContext = [type=default, mState=IDLE, apnEnabled=true, mDependencyMet=true]
…
还有当创建NetworkFactory的时候,当条件合适的时候最终也会触发setUpData,但是对开机流程来说,都不合适。
所以完整的开机创建数据连接的流程为:
DcTracker(constructor)->registerForAllEvents->registerServiceStateTrackerEvents->DctConstants.EVENT_DATA_CONNECTION_ATTACHED->onDataConnectionAttached->setupDataOnAllConnectableApns
->trySetupData->setupData->DataConnection.bringUp->DataConnection.EVENT_CONNECT(DcInactiveState)->connect(同时将状态切换到mActivatingState)->DataServiceManager.setupDataCall->CellularDataService.CellularDataServiceProvider.setupDataCall
->mPhone.mCi.setupDataCall->RIL.setupDataCall.
完整的KeyLog:
05-18 14:26:21.489 W/TelephonyComponentFactory( 2185): Injection jar is not protected , path: /system/framework/qti-telephony-common.jarstatvfs failed: ENOENT (No such file or directory)
05-18 14:26:21.519 I/PhoneFactory( 2185): Cdma Subscription set to 0
05-18 14:26:21.519 I/PhoneFactory( 2185): Network Mode set to 10
05-18 14:26:21.521 D/RILJ ( 2185): RIL: init preferredNetworkType=10 cdmaSubscription=0) [SUBnull]
05-18 14:26:21.541 D/RILJ ( 2185): Unsol response received; Sending ack to ril.cpp [SUB0]
05-18 14:26:21.541 D/RILJ ( 2185): [UNSL]< UNSOL_RIL_CONNECTED [SUB0]
05-18 14:26:21.542 D/RILJ ( 2185): [0002]> RADIO_POWER on = false [SUB0]
//Create GsmCdmaCallTracker
05-18 14:26:21.612 D/TelephonyComponentFactory( 2185): makeGsmCdmaCallTracker
//Create DcTracker
05-18 14:26:21.763 D/QtiTelephonyComponentFactory( 2185): makeQtiDcTracker
//init Apn on DcTracker constructor
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: E
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: skipping unknown type=1
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=default mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=mms mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=supl mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=dun mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=hipri mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=fota mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=ims mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=cbs mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: skipping unknown type=7
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: skipping unknown type=9
05-18 14:26:21.784 D/ ( 2185): [0]initApnContexts: apnContext={mApnType=emergency mState=IDLE mWaitingApns={null} mApnSetting={null} mReason=dataEnabled mDataEnabled=false mDependencyMet=true}
//Update ImsPhone
05-18 14:26:21.886 D/Phone ( 2185): updateImsPhone mImsServiceReady=true
//Create ImsPhoneCallTracker
05-18 14:26:21.887 D/TelephonyComponentFactory( 2185): makeImsPhoneCallTracker
//Register NetworkFactory to ConnectivityService, which will triggle trySetupData, but will failed in this case.
05-18 14:26:21.904 D/TelephonyNetworkFactory[0]( 2185): Registering NetworkFactory
05-18 14:26:21.905 D/ConnectivityService( 1407): Got NetworkFactory Messenger for TelephonyNetworkFactory[0]
//Notify SSTracker to notify DcTracker the data attached.
05-18 14:26:29.210 D/RILJ ( 2185): [UNSL]< UNSOL_RESPONSE_NETWORK_STATE_CHANGED [SUB0]
05-18 14:26:29.210 D/NRM-C ( 2185): onNetworkStateChanged
05-18 14:26:29.210 D/SST ( 2185): [0] Poll ServiceState done: oldSS=[{mVoiceRegState=0(IN_SERVICE), mDataRegState=1(OUT_OF_SERVICE), mChannelNumber=38950, duplexMode()=0, mCellBandwidths=[], mVoiceOperatorAlphaLong=CMCC, mVoiceOperatorAlphaShort=CMCC, mDataOperatorAlphaLong=CMCC, mDataOperatorAlphaShort=CMCC, isManualNetworkSelection=false(automatic), getRilVoiceRadioTechnology=14(LTE), getRilDataRadioTechnology=0(Unknown), mCssIndicator=unsupported, mNetworkId=-1, mSystemId=-1, mCdmaRoamingIndicator=-1, mCdmaDefaultRoamingIndicator=-1, mIsEmergencyOnly=false, isUsingCarrierAggregation=false, mLteEarfcnRsrpBoost=0, mNetworkRegistrationInfos=[NetworkRegistrationInfo{ domain=PS transportType=WWAN registrationState=NOT_REG_OR_SEARCHING roamingType=NOT_ROAMING accessNetworkTechnology=UNKNOWN rejectCause=0 emergencyEnabled=false availableServices=[] cellIdentity=null voiceSpecificInfo=null dataSpecificInfo=android.telephony.DataSpecificRegistrationInfo :{ maxDataCalls = 20 isDcNrRestricted = false isNrAvailable = false isEnDcAvailable = false LteVopsSupportInfo : mVopsSupport = 1 mEmcBearerSupport = 1 mIsUsingCarrierAggregation = false } nrState=NONE}, NetworkRegistrationInfo{ domain=CS transportType=WWAN registrationState=HOME roamingType=NOT_ROAMING accessNetworkTechnology=LTE rejectCause=0 emergencyEnabled=false availableServices=[VOICE,SMS,VIDEO] cellIdentity=CellIdentityLte:{ mCi=21765889 mPci=89 mTac=4421 mEarfcn=38950 mBandwidth=2147483647 mMcc=460 mMnc=00 mAlphaLong=CMCC mAlphaShort=CMCC} voiceSpecificInfo=VoiceSpecificRegistrationInfo { mCssSupported=false mRoamingIndicator=-1 mSystemIsInPrl=-1 mDefaultRoamingIndicator=-1} dataSpecificInfo=null nrState=NONE}], mNrFrequencyRange=-1, mOperatorAlphaLongRaw=CMCC, mOperatorAlphaShortRaw=CMCC, mIsIwlanPreferred=false}] newSS=[{mVoiceRegState=0(IN_SERVICE), mDataRegState=0(IN_SERVICE), mChannelNumber=38950, duplexMode()=2, mCellBandwidths=[], mVoiceOperatorAlphaLong=CMCC, mVoiceOperatorAlphaShort=CMCC, mDataOperatorAlphaLong=CMCC, mDataOperatorAlphaShort=CMCC, isManualNetworkSelection=false(automatic), getRilVoiceRadioTechnology=14(LTE), getRilDataRadioTechnology=14(LTE), mCssIndicator=unsupported, mNetworkId=-1, mSystemId=-1, mCdmaRoamingIndicator=-1, mCdmaDefaultRoamingIndicator=-1, mIsEmergencyOnly=false, isUsingCarrierAggregation=false, mLteEarfcnRsrpBoost=0, mNetworkRegistrationInfos=[NetworkRegistrationInfo{ domain=CS transportType=WWAN registrationState=HOME roamingType=NOT_ROAMING accessNetworkTechnology=LTE rejectCause=0 emergencyEnabled=false availableServices=[VOICE,SMS,VIDEO] cellIdentity=CellIdentityLte:{ mCi=21765889 mPci=89 mTac=4421 mEarfcn=38950 mBandwidth=2147483647 mMcc=460 mMnc=00 mAlphaLong=CMCC mAlphaShort=CMCC} voiceSpecificInfo=VoiceSpecificRegistrationInfo { mCssSupported=false mRoamingIndicator=1 mSystemIsInPrl=-1 mDefaultRoamingIndicator=-1} dataSpecificInfo=null nrState=NONE}, NetworkRegistrationInfo{ domain=PS transportType=WWAN registrationState=HOME roamingType=NOT_ROAMING accessNetworkTechnology=LTE rejectCause=0 emergencyEnabled=false availableServices=[DATA] cellIdentity=CellIdentityLte:{ mCi=21765889 mPci=89 mTac=4421 mEarfcn=38950 mBandwidth=2147483647 mMcc=460 mMnc=00 mAlphaLong=CMCC mAlphaShort=CMCC} voiceSpecificInfo=null dataSpecificInfo=android.telephony.DataSpecificRegistrationInfo :{ maxDataCalls = 20 isDcNrRestricted = false isNrAvailable = false isEnDcAvailable = false LteVopsSupportInfo : mVopsSupport = 2 mEmcBearerSupport = 3 mIsUsingCarrierAggregation = false } nrState=NONE}], mNrFrequencyRange=-1, mOperatorAlphaLongRaw=CMCC, mOperatorAlphaShortRaw=CMCC, mIsIwlanPreferred=false}] oldMaxDataCalls=20 mNewMaxDataCalls=20 oldReasonDataDenied=0 mNewReasonDataDenied=0
05-18 14:26:29.210 D/SST ( 2185): [0] pollStateDone: hasRegistered = false hasDeregistered = false hasDataAttached = {1=true} hasDataDetached = {1=false} hasDataRegStateChanged = {1=true} hasRilVoiceRadioTechnologyChanged = false hasRilDataRadioTechnologyChanged = {1=true} hasDataTransportPreferenceChanged = false hasChanged = true hasVoiceRoamingOn = false hasVoiceRoamingOff = false hasDataRoamingOn =false hasDataRoamingOff = false hasLocationChanged = false has4gHandoff = false hasMultiApnSupport = false hasLostMultiApnSupport = false hasCssIndicatorChanged = false hasNrFrequencyRangeChanged = false hasNrStateChanged = false hasAirplaneModeOnlChanged = false
**05-18 14:26:29.347 D/QtiDCT-C( 2185): [0]onDataConnectionAttached**
05-18 14:26:29.347 D/QtiDCT-C( 2185): [0]setupDataOnAllConnectableApns: dataAttached emergency:[state=IDLE,enabled=false] mms:[state=IDLE,enabled=false] supl:[state=IDLE,enabled=false] hipri:[state=IDLE,enabled=false] dun:[state=IDLE,enabled=false] fota:[state=IDLE,enabled=false] ims:[state=IDLE,enabled=false] default:[state=IDLE,enabled=true] cbs:[state=IDLE,enabled=false]
05-18 14:26:29.347 D/QtiDCT-C( 2185): [0]isConnectable() call trySetupData
05-18 14:26:29.352 D/QtiDCT-C( 2185): [0]trySetupData for APN type default, reason: dataAttached, requestType=NORMAL. Data allowed, reason: NORMAL
05-18 14:26:29.357 D/QtiDCT-C( 2185): [0]setupData: apnContext={mApnType=default mState=IDLE mWaitingApns={[[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1]} mApnSetting={null} mReason=dataAttached mDataEnabled=true mDependencyMet=true}, requestType=NORMAL
05-18 14:26:29.361 D/QtiDCT-C( 2185): [0]setupData: dc={DC-QtiDC-1: State=DcInactiveState mApnSetting=null RefCount=0 mCid=-1 mCreateTime=0 mLastastFailTime=0 mLastFailCause=0 mTag=0 mLinkProperties={LinkAddresses: [ ] DnsAddresses: [ ] Domains: null MTU: 0 Routes: [ ]} linkCapabilities=[ Transports: CELLULAR Capabilities: NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_ROAMING&NOT_CONGESTED LinkUpBandwidth>=15000Kbps LinkDnBandwidth>=30000Kbps Specifier: <0>] mRestrictedNetworkOverride=false mApnContexts={}} apnSetting=[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1 gen#=105-18 14:26:29.368 D/DC-QtiDC-1( 2185): bringUp: apnContext={mApnType=default mState=CONNECTING mWaitingApns={[[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1]} mApnSetting={[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1} mReason=dataAttached mDataEnabled=true mDependencyMet=true} onCompletedMsg={ when=-24s962ms what=270336 obj=Pair{{mApnType=default mState=CONNECTING mWaitingApns={[[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1]} mApnSetting={[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1} mReason=dataAttached mDataEnabled=true mDependencyMet=true} 1} target=com.qualcomm.qti.internal.telephony.dataconnection.QtiDcTracker }
05-18 14:26:29.368 D/DC-QtiDC-1( 2185): connect: carrier='ä¸å›½ç§»åŠ¨ (China Mobile) GPRS' APN='cmnet' proxy='' port='-1'
05-18 14:26:29.378 D/DSM-C ( 2185): setupDataCall
05-18 14:26:29.379 D/RILJ ( 2185): [0250]> SETUP_DATA_CALL,dataRat=14,isRoaming=false,allowRoaming=false,DataProfile=-1/2/3/cmnet///0/0/0/0/true/21/2/0/0/false/true [SUB0]
05-18 14:26:29.755 D/RILJ ( 2185): [0250]< SETUP_DATA_CALL DataCallResponse: { cause=0 retry=-1 cid=0 linkStatus=2 protocolType=2 ifname=rmnet_data1 addresses=[10.8.126.27/29] dnses=[/221.179.155.193, /221.179.155.209] gateways=[/10.8.126.28] pcscf=[] mtu=0} [SUB0]
05-18 14:26:29.755 D/DSM-C ( 2185): onSetupDataCallComplete. resultCode = 0, response = DataCallResponse: { cause=0 retry=-1 cid=0 linkStatus=2 protocolType=2 ifname=rmnet_data1 addresses=[10.8.126.27/29] dnses=[/221.179.155.193, /221.179.155.209] gateways=[/10.8.126.28] pcscf=[] mtu=0}
05-18 14:26:29.757 D/DC-QtiDC-1( 2185): DcActivatingState: msg={what=EVENT_SETUP_DATA_CONNECTION_DONE when=-1ms obj={mTag=2 mApnContext={mApnType=default mState=CONNECTING mWaitingApns={[[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1]} mApnSetting={[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1} mReason=dataAttached mDataEnabled=true mDependencyMet=true} mProfileId=-1 mRat=14 mOnCompletedMsg={what=0x42000 when=-25s351ms obj=Pair{{mApnType=default mState=CONNECTING mWaitingApns={[[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1]} mApnSetting={[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1} mReason=dataAttached mDataEnabled=true mDependencyMet=true} 1} target=Handler (com.qualcomm.qti.internal.telephony.dataconnection.QtiDcTracker) {5996016} replyTo=null} mRequestType=NORMAL mSubId=1} target=Handler (com.android.internal.util.StateMachine$SmHandler) {9c33f6d} replyTo=null}
05-18 14:26:29.757 D/DC-QtiDC-1( 2185): onSetupConnectionCompleted: resultCode=0, response=DataCallResponse: { cause=0 retry=-1 cid=0 linkStatus=2 protocolType=2 ifname=rmnet_data1 addresses=[10.8.126.27/29] dnses=[/221.179.155.193, /221.179.155.209] gateways=[/10.8.126.28] pcscf=[] mtu=0}
05-18 14:26:29.757 D/DC-QtiDC-1( 2185): onSetupConnectionCompleted received successful DataCallResponse
05-18 14:26:29.772 D/QtiDCT-C( 2185): [0]completeConnection: successful, notify the world apnContext={mApnType=default mState=CONNECTED mWaitingApns={[[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1]} mApnSetting={[ApnSettingV7] ä¸å›½ç§»åŠ¨ (China Mobile) GPRS, 2775, 46007, cmnet, , null, , null, null, 3, supl | hipri | default, IPV4V6, IPV4V6, true, 0, false, 0, 0, 0, 0, null, , false, 0, 0, -1, -1} mReason=connected mDataEnabled=true mDependencyMet=true}
05-18 14:26:29.772 D/GsmCdmaPhone( 2185): [0] getDataConnectionState apnType=default ret=CONNECTED05-18 14:26:29.776 D/ConnectivityService( 1407): registerNetworkAgent NetworkAgentInfo{ ni{[type: MOBILE[LTE], state: CONNECTED/CONNECTED, reason: connected, extra: cmnet, failover: false, available: true, roaming: false]} network{100} nethandle{432902426637} lp{{InterfaceName: rmnet_data1 LinkAddresses: [ 10.8.126.27/29 ] DnsAddresses: [ /221.179.155.193,/221.179.155.209 ] Domains: null MTU: 1500 TcpBufferSizes: 524288,1048576,8388608,262144,524288,4194304 Routes: [ 0.0.0.0/0 -> 10.8.126.28 rmnet_data1,10.8.126.24/29 -> 0.0.0.0 rmnet_data1 ]}} nc{[ Transports: CELLULAR Capabilities: SUPL&INTERNET&NOT_RESTRICTED&TRUSTED&NOT_VPN&NOT_ROAMING&FOREGROUND&NOT_CONGESTED&NOT_SUSPENDED LinkUpBandwidth>=15000Kbps LinkDnBandwidth>=30000Kbps Specifier: <1>]} Score{10} everValidated{false} lastValidated{false} created{false} lingering{false} explicitlySelected{false} acceptUnvalidated{false} everCaptivePortalDetected{false} lastCaptivePortalDetected{false} captivePortalValidationPending{false} partialConnectivity{false} acceptPartialConnectivity{false} clat{mBaseIface: null, mIface: null, mState: IDLE} }
05-18 14:26:29.780 D/QtiDCT-C( 2185): [0]onDataSetupComplete: SETUP complete type=default
主要的方法介绍:
setupData流程
DcTracker在下发setupData->DataConnection.bringUp的时候,会携带一条消息:
DctConstants.EVENT_DATA_SETUP_COMPLETE,对应DcTraker中的Handler会进行处理
onDataSetupComplete -> completeConnection ->
- mPhone.notifyDataConnection(apnContext.getApnType()):最终通过TelephonyRegistry通知别的component当前有dataStateChanged,比如说statusbar上的图标显示:MobileSignalController
DataConnection.bringUp(EVENT_CONNECT:该消息在处理的时候从初始态mInactiveState translateTo mActivatingState)->connect(setupdatacall)也会携带message:
EVENT_SETUP_DATA_CONNECTION_DONE
这个消息处理在ActivatingState,主要就是将当前的状态切换到ActivateState,进入到这个状态后,主要就是创建NetworkAgent,并将其注册到ConnectvityService中。
让ConnectivityService来管理该数据连接。
二, 从Settings UI打开数据开关创建默认data connection:
TelephonyManager提供了接口setDataEnabled来供UI 层打开或者关闭Mobile data from UI。
这个api最终也会调用到上述所说的trySetupData中来创建数据连接。
入口Activity:
cmp=com.android.settings/.network.telephony.MobileNetworkActivity
06-02 18:14:44.687 1404 3145 I ActivityTaskManager: START u0 {cmp=com.android.settings/.network.telephony.MobileNetworkActivity (has extras)} from uid 1000
问题:
- 在创建数据连接的时候是如何来筛选APN的?
DcTracker在初始化的时候会先调用initApnContexts初始化所有的APN,该过程其实也就是从config文件中读取出所有的apn信息,将其存放到队列中(mPrioritySortedApnContexts),在尝试创建数据连接的时候遍历该队列,符合条件的,发给trySetupData,然后又在trySetupData方法中,调用isDataAllowed方法做筛选,如果该方法返回false,则trySetupData失败。
isDataAllowed这个方法在根据当前数据attach的情况,SIM卡 loaded的情况,等等来做判断
所以说初始化过程中创建数据连接的apn筛选,其实经过了两次筛选。
AndroidQ_默认数据连接的建立相关推荐
- springboot2.0 默认数据连接池HikariPool(java平台最快的,替换druid)性能对比
背景 对现有的数据库连接池做调研对比,综合性能,可靠性,稳定性,扩展性等因素选出推荐出最优的数据库连接池 . NOTE: 本文所有测试均是MySQL库 测试结论 1:性能方面 hikariCP> ...
- spring boot 配置默认数据连接池 HiKariCP
一.为什么选择HiKariCP 没其他原因,就是一个字 快. 性能方面 hikariCP>druid>tomcat-jdbc>dbcp>c3p0 .hikariCP的高性能得益 ...
- FTP的控制连接和数据连接分别是做什么的?主动模式和被动模式有什么区别?
你知道FTP的控制连接和数据连接分别是做什么的吗? 你知道FTP的主动模式和被动模式有什么区别吗? 你知道实际工作中,会使用主动FTP还是被动FTP吗?又是为什么呢? 一. FTP的两种连接 FTP( ...
- 信息提示无法建立数据连接服务器,FileZilla 链接FTP服务器无法建立数据连接: ECONNREFUSED...
今天想在服务器上下载 一个文件(宝塔面板 腾讯云), 有点大,就想用FTP断点的方式 来下载,以备 网络中断的错误. 无奈遇到了这样的错误: 命令: MLSD 错误: 无法建立数据连接: ECONNR ...
- tableau无法建立连接_Tableau入门(一):数据连接
1 开始界面 你可以在Tableau官网上下载Tableau Desktop(即桌面版). 打开Tableau Desktop后,你可以看到如下界面: 图1 Tableau开始界面 开始界面的左侧是T ...
- 数据连接linux网络编程之TCP/IP基础(四):TCP连接的建立和断开、滑动窗口
在写这篇文章之前,xxx已经写过了几篇关于改数据连接主题的文章,想要了解的朋友可以去翻一下之前的文章 一.TCP段格式: TCP的段格式如下图所示 源端口号与目标端口号 源端口号和目标端口号,加上IP ...
- fxp连接失败_FlashFXP使用PASV被动模式建立数据连接失败的问题解决
FTP是常见的上传下载网络应用之一,虽然如今对于普通用户很少用到了,但在某些特殊场合还是会使用到的. 以Windows 2003中IIS自带的FTP功能为例,其服务端本身的配置是相对简单的,稍作设置后 ...
- 计算机配置中无可移动设备访问,由于您的计算机尚未建立以太网,wifi或移动数据连接,因此我们无法设置移动热点-...
在热点界面上,选择"设置移动热点" 进入设置界面,输入"密码",然后单击"保存"以修改移动热点的密码. 如果您无法通过简单的设置解决问题,则 ...
- 《TCP/IP具体解释》读书笔记(18章)-TCP连接的建立与中止
TCP是一个面向连接的协议.不管哪一方向还有一方发送数据之前.都必须在两方之间建立一条连接.这样的两端间连接的建立与无连接协议UDP不同.UDP向还有一端发送数据报时,无需不论什么预告的握手. 1.建 ...
最新文章
- Python:Spider
- 作为程序员应有10项权利
- 卓有成效的管理者应该借助哪些团队协作工具?
- SqlSugar ORM 入门到精通【一】入门篇
- Data Augmentation
- 使用NW.js封装微信公众号菜单编辑器为桌面应用
- 代码添加ProgressBar 进度条
- 延时消息_Handler的消息延时是怎么实现的
- 上下div高度动态自适应--另类处理方案
- 【语音隐写】基于matlab GUI DWT音频数字水印(带语音播报)【含Matlab源码 711期】
- 杨强教授新番!破解机器学习数据孤岛和数据保护难题
- JavaFX屏幕截图工具ScreenCapture
- 使用CSS3制作一个简单的导航栏
- no matching cipher found
- C语言报错警告合集(转)
- bzoj1778 驱逐猪猡 [高斯消元+概率DP]
- 中科云谷正式落户上海临港 构筑工业互联网新图景
- ros3。3教程 入门到高级
- vb For循环例子
- 2022阿里云轻量服务器2核2G 2核4G
热门文章
- NRF51822——LCD128X64驱动
- Rust初学者环境搭建(非Viatual Studio ,自定义安装目录)
- 版本 000 / 2020 作业计划/数量计划中没有 作业类型 XXX的控制记录
- [答学员问】对于低学历的我,想找一个培训机构学习Linux网络运维,哪个培训机构教学稍微好一点呢?
- 分享8款令人惊叹的HTML5 Canvas动画特效
- [精选]看股票走势图的软件用哪个好(如何看懂股市行情大盘的走势)
- 用优雅拂去岁月的轻尘
- 瑞波2020年第三季度XRP市场报告节选
- 计算机体系结构 专业排名,计算机系统专业及其排名介绍 加州伯克利排名第一...
- 阿里云Intel Xeon(Ice Lake) Platinum 8369B服务器CPU性能评测