標籤:
TeamTalk Android程式碼分析(商務程序篇)
1.1 總體結構
1.總體結構有點類似MVC的感覺,模組結構從上向下大體是:
UI層:Activity和Fragment構成,期間包括常用的一些開原始檔控制如:imageloader,speedx,gifview等,和下層資料變更通知通過匯流排事件完成(EventBus)
管理層:Service(即:imservice,下文均採用此稱呼)和一些按照業務劃分的Manager(loginmanager,contactmanager,sessionmanager,socketmanager 等),該層負責業務的流轉和資料介面的提供,
資料和緩衝層:才greendao實現,包括一系列業務相關的緩衝,緩衝的對象在各manager實體中處理。
網路層:具體由netty實現,擷取或發送資料通過pb協議實現(protobuf)
2.1 登入過程
1>請求登入伺服器(http),分配Message Service器及其他相關配置
2>連結請求Message Service器
3>其中如果網路連接失敗,採用本地登入過程,即:在登入狀態的情況下,沒有網路也可以查看本地曆史資訊。
4>登入Message Service器成功後,發送匯流排事件通知imservice
5>imservice初始化各manager,開啟本地和網路資料請求,本機快取及其他配置的資料填充。
3.1 ContactManager的初始化操作
3.1.1 本機資料的業務操作
1>資料庫load部門列表,並填充部門map(departmentmap)
2>資料庫load使用者列表,並填充使用者map(usermap)
3>發送匯流排事件,通知相關介面(聊天/通訊錄/my),並設定該manager資料狀態就緒
相關頁面動作如下:
1>聊天頁面動作:只有session,user,group 資料全部就緒,這個頁面才會更新,稍後再詳細分析
2>通訊錄頁面動作:
(1)設定使用者tab資料,更新ui
(2)設定部門tab資料,更新ui
(3)使用者和部門資料就緒,搜尋狀態可操作
3>通過loginmanager擷取登入資訊,更新ui(這個位置的觸發,可以放置在登入成功後及時事件通知)
3.1.2 網路資料的業務操作
1>按照本機存放區的最後時間點作為參數,請求部門列表
2>按照本機存放區的最後時間點作為參數,請求使用者列表
3>擷取部門資料:
1)緩衝map
2)儲存db
3)發送匯流排事件(userinfoevent事件,user_info_update),通知頁面更新ui
涉及頁面有:通訊錄頁面:使用者列表ui/部門列表ui/使用者詳細資料(userinfofragment),如果頁面收到通知,則擷取快取資料,更新ui
4>擷取使用者資料:
1)緩衝usermap
2)儲存db
3)發送匯流排事件更新ui,頁面響應同部門資料。
注意事項:通知頁面更新的匯流排事件,考慮採用poststicky 形式。
3.2 GroupManager的初始化操作
TeamTalk Android程式碼分析(商務程序篇)