TeamTalk Android代碼分析(業務流程篇)


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),分配消息服務器及其他相關配置

 

2>鏈接請求消息服務器

 

3>其中如果網絡連接失敗,采用本地登錄過程,即:在登錄狀態的情況下,沒有網絡也可以查看本地歷史信息。

 

4>登錄消息服務器成功后,發送總線事件通知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的初始化操作


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM