天天看點

微信Android用戶端架構演進之路-簡單總結

微信Android用戶端架構演進之路-簡單總結

剛看了微信架構的演進之路的文章,文章連結如下:

http://www.infoq.com/cn/articles/wechat-android-app-architecture

現在做下簡單的總結,友善日後自己可檢視。

開發初期的架構:

采用MVP+消息通知機制,複雜的事情盡量交出去做,保持最精簡的用戶端代碼。結構清晰,開發起來,快速,簡單,暴力。但後期需求暴增,内代碼量、記憶體占用、安裝包體積迅速膨脹,問題很多。

另外,消息推送問題:在長連接配接的問題上,縮短心跳機制,保持住長連接配接。優化問題另外談。

改進。重要思想:輕重分離!

程序上的輕重分離

在記憶體占用過多的問題上,采用輕重程序拆分的思路:維持主程序,将輔助的非常用的功能遷移到生命周期短暫的程序(如推送程序,工具程序)。程序的分離解決了系統因為微信資源消耗,主動幹掉微信服務的困境。問題是:程序每一次都要重新加載,裡面所有的Cache、圖檔、界面全部要重新去執行一遍同樣的代碼。但權衡下來,還是利大于弊。

此外,還有兩個問題:一是單dex 65535方法數限制,二是線性記憶體配置設定器(LinearAlloc)限制。

解決方案:

谷歌方案:官方的MultiDex分dex機制解決了方法數限制的問題,其中main dex最小化原則,結合dalvik LinearAlloc heap size調整(修改到了16M),使得dexopt的失敗幾率大幅下降。而art的出現徹底不再存在LinearAlloc這樣的限制。

功能上的輕重分離

解耦思想:功能插件化。将附屬的新功能分離在獨立的插件工程(p_XX)中,保證主app功能的快速和穩定,每個插件有獨立的UI界面邏輯和資源、存儲及網絡協定編解碼處理邏輯,通過共用統一的基礎庫接口通路網絡服務。而且保證插件之間不依賴,插件隻會向下依賴,從架構上,縱向分離功能子產品。

加快開發速度的方法:建立必要的工具和規範:利用代碼字段生成的手段,減少重複,模式化的代碼開發工作。

做新功能時,使用獨立插件子工程,好的工程模闆可以事半功倍。

開源軟體的開發模式:使用git做版本控制,采用gradle + Android Studio的分布式建構思想,采用多個分支并行開發。公共元件通過maven在不同的開發團隊中共享并随時使用。