今天工作之余,整理了一下android2.3的上网拨号流程,记录一下,以便以后查阅
pppd的工作流程主要分为两个层次: java层,和c层
今天就记录一下java层的
我们就从UI点击上网拨号开始流程分析:
java:
packages/apps/Phone/src/com/android/phone/Settings.java [ cm.setMobileDataEnabled(mButtonDataEnabled.isChecked()); ]
->
frameworks/base/core/java/android/net/ConnectivityManager.java [ setMobileDataEnabled() ]
->
core/java/android/net/IConnectivityManager.java [ setMobileDataEnabled() ]
->
frameworks/base/services/java/com/android/server/ConnectivityService extends IConnectivityManager.Stub [ setMobileDataEnabled ]
->
ConnectivityService [ MyHandler -> handleMessage -> case EVENT_SET_MOBILE_DATA: -> handleSetMobileData ]
->
ConnectivityService [ mNetTrackers[ConnectivityManager.TYPE_MOBILE].reconnect(); ]
->
MobileDataStateTracker extends NetworkStateTracker [ reconnect() ]
->
MobileDataStateTracker [ setEnableApn ]
->
DataConnectionTracker
[ enableApnType() -> setEnabled() -> handleMessage <case EVENT_ENABLE_NEW_APN > onEnableApn() ]
->
GsmDataConnectionTracker extends DataConnectionTracker
[ onEnableNewApn() -> cleanUpConnection() -> conn.disconnect(obtainMessage(EVENT_DISCONNECT_DONE, reason)); ]
->
DataConnectionTracker [ handleMessage -> <case EVENT_DISCONNECT_DONE onDisconnectDone()>
->
GsmDataConnectionTracker [ onDisconnectDone() -> trySetupData(reason); -> setupData(reason) ]
->
DataConnection [ processMessage-> <case EVENT_CONNECT onConnect(cp); >
->
GsmDataConnection [ phone.mCM.setupDataCall() ]
->
RIL [ setupDataCall() ]到这里, java层的pppd请求就通过RIL发到C层了