DcActivatingState状态是在建立数据业务的时候,从状态DcInactiveState转换过来的,在DcActivatingState状态主要处理的事件有如下:
1.EVENT_SETUP_DATA_CONNECTION_DONE,此消息是在DcInactiveState申请建立数据业务的时候的回调消息,对这个消息的处理主要完成如下工作.
a.onSetupConnectionCompleted()完成建立数据业务后对modem返回的结果进行解析的过程.
假如(ar.exception != null) ,那么通过下面代码进行结果解析:
if (ar.exception instanceof CommandException && ((CommandException) (ar.exception)).getCommandError()
== CommandException.Error.RADIO_NOT_AVAILABLE) {
result = DataCallResponse.SetupResult.ERR_BadCommand;
result.mFailCause = DcFailCause.RADIO_NOT_AVAILABLE;
} else if ((response == null) || (response.version > 4)) {
result = DataCallResponse.SetupResult.ERR_GetLastErrorFromRil;
} else {
result = DataCallResponse.SetupResult.ERR_RilError;
result.mFailCause = DcFailCause.fromInt(response.status);
}
假如(ar.exception == null)但是if (response.status != 0)要对status的值用下面的方法进行解析.
result = DataCallResponse.SetupResult.ERR_RilError;
result.mFailCause = DcFailCause.fromInt(response.status);
对应的原因解析的文件是:\frameworks\opt\telephony\src\java\com\android\internal\telephony\dataconnection\DcFailCause.java
假如(ar.exception == null) 同时(response.status == 0),那么就会result = updateLinkProperty(response).setupResult;来对结果赋值,
在updateLinkProperty里面会对MTU,TCP buffer,proxy等属性进行设置.
b.假如经过上面a里面对result进行赋值后,这里将分别对不同的值进行处理:
if(SUCCESS) transitionTo(mActiveState);
if(ERR_BadCommand) transitionTo(mInactiveState); 不需要重试.
if(ERR_UnacceptableParameter) tearDownData(cp); transitionTo(mDisconnectingErrorCreatingConnection);不需要重试.在DcDisconnectionErrorCreatingConnection中会处理tearDownData(cp)返回的EVENT_DEACTIVATE_DONE事件进行处理.
if(ERR_GetLastErrorFromRil) 不需要重试.
if(ERR_RilError) 需要重试,重试的时间是modem层放回的,可以通过getSuggestedRetryDelay(ar)方法获得,同时调用cp.mApnContext.setModemSuggestedDelay(delay);设置重试的时间.在时间将在DcTracker的onDataSetupCompleteError里面用到,transitionTo(mInactiveState);切换到mInactiveState状态.