Android手機系統數據連接核心類-java層說明

 1.DataConnectionTracker.

   DataConnectionTracker 就是一個 Handler ,處理與數據連接相關的各種消息,是數據連接的核心類,也就是發起數據連接以及處理數據連接狀態的主體類,主要工作如下:
   <1>做數據連接的前期準備工作,如檢查apn,DataConnectionAc,等。
   <2>初始化DataConnection,DataConnectionAc
   <3>通過DataConnectionAc,將數據連接的命令,發送給DataConnection   
   <4>DataConnection通過自己的狀態機,將網絡狀態進行切換。
   <5> 通知NetworkStateTracker,數據連接已經發生變化(連接,斷開,正在連接等狀態)。
 主要有GsmDataConnectionTracker 和 CdmaDataConnectionTracker 

 2.DataConnection

   描述具體的數據連接,將數據連接的命令,通過RIL的封裝,發送給RIL層,它是一個狀態機,可以完成網絡狀態切換的工作,主要有GsmDataConnection 等實現類。

 3.NetworkStateTracker

   NetworkStateTracker 接收 DataConnectionTracker通過DefaultPhoneNotifier發出的廣播,如連接成功,連接失敗等。主要有MobileDataStateTracker等實現類,處理相關廣播後,將網絡狀態變化的消息發送給ConnectivityService 去處理。

 4.ConnectivityService

   ConnectivityService 通過接收NetworkTracker 發送的消息,來知道網絡連接的狀況,處理連接,斷開,正在連接,正在斷開等動作。
   以移動網絡連接爲例。
   ConnectivityService 在SystemServer 進程中創建,phone 對象是在Phone進程中創建,SystemServer進程在Phone應用之前創建。GSMPhone 創建 GsmDataConnectionTracker,GsmDataConnectionTracker創建GsmDataConnection.GsmPhone 創建DefaultPhoneNotifier,這個DefaultPhoneNotifier主要將 GsmDataConnectionTracker 的數據連接狀態變化的消息以廣播的消息發送出去。
   ConnectionService 創建了MobileDataStateTracker,並且監聽 MobileDataStateTracker的與網絡狀態相關的消息。MobileDataStateTracker 註冊了一個內部Receiver
   
        IntentFilter filter = new IntentFilter();
        filter.addAction(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED);
        filter.addAction(TelephonyIntents.ACTION_DATA_CONNECTION_FAILED);
        filter.addAction(DataConnectionTracker.ACTION_DATA_CONNECTION_TRACKER_MESSENGER);

        mContext.registerReceiver(new MobileDataStateReceiver(), filter);
        mMobileDataState = Phone.DataState.DISCONNECTED;

       ACTION_ANY_DATA_CONNECTION_STATE_CHANGED,當 GsmDataConnectionTracker 檢測到網絡狀態發生變化時,就通過DefaultPhoneNotifier,把這個Action 發送出去,
       MobileDataStateTracker將消息處理後,告訴ConnectivityService 現在的網絡狀態。
       ACTION_DATA_CONNECTION_FAILED,當GsmDataConnectionTracker 檢測到網絡狀態連接失敗時,就通過DefaultPhoneNotifier,把這個Action 發送出去,
       MobileDataStateTracker將消息處理後,告訴ConnectivityService 現在的網絡狀態。
       ACTION_DATA_CONNECTION_TRACKER_MESSENGER,當GsmDataConnectionTracker 在GSMPhone 中初始化時,其構造函數,就會發送該Action,MobileDataStateTracker,接收該Action後,新建了一個 AsyncChannel,這個AsynChannel 就是MobileDataStateTracker 和GsmDataConnectionTracker 之間進行數據通信的通道,比如 MobileDataStateTracker的 setUserDataEnable,
   public void setUserDataEnable(boolean enabled) {
        if (DBG) log("setUserDataEnable: E enabled=" + enabled);
        final AsyncChannel channel = mDataConnectionTrackerAc;
        if (channel != null) {
            channel.sendMessage(CMD_SET_USER_DATA_ENABLE, enabled ? ENABLED : DISABLED);
            mUserDataEnabled = enabled;
        }
        if (VDBG) log("setUserDataEnable: X enabled=" + enabled);
    }


       channel 就是之前新建的AsyncChannel,將數據連接的任務交給 GsmDataConnectionTracker.
       ConnectivityService 接收到 MobileDataStateTracker發送的消息後,就開始處理連接狀態的變化的工作,如handleDisconnected.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章