以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。
[Android]如何做一個崩潰率少於千分之三噶應用app--章節列表
近來業務忙得不亦樂乎,因為年底要研發發紅包了,哈哈。
相信有關注我的文章的人,已經等了很久了,我也在這一章發我最大的福利。(醞釀了這麼久終於要發大招啦)
看完我上一節關於Activity的module間跳轉跳轉後,是否對大家有一定的啟發呢?
**************
如果Android研發已經開發有三五年經驗,很多人經歷過4.0 Fragment的出現後,就會有人編寫到一些關於Fragment的架構,例如單Activity+多Fragment,多Activity+多Fragment的架構。再後來MVP架構的盛行,MVVM架構的提出,然後通過到工具的變遷從Eclipse到Android studio,產生元件化架構開發。
架構的變更,系統程式碼框架的變化,研發的工具換代,新的架構思想的普及,專案一年一次的大版本的變化。
這些都會讓你覺得你重新思考是否需要重構現在的程式碼,重構程式碼並不是易事。你需要重新繪製你程式碼的線路圖,和新架構思想的線路圖。框架是要規範各種開發,基礎在於設計模式,各種設計模式利用的場景。
Android的原始碼是很好例子,其每年都會有新的變更,更高效更高質量的程式碼思想,很多時候起源都是對原始碼的熟讀和利用。以前你覺得越來越多程式猿去研究原始碼,費事費力,做app為何會需要研究這些東西?你覺得設計模式都是從哪裡來的,為何需要設計模式,業務只要用好if else已經足夠自己飲醉了。
當你經歷了這些,你需要用一個全新的思維方式看待那些你認為熟悉的程式碼。從功能到架構,看到起源點。
元件化模組化架構的,最終還是離不開Activity與Fragment,View之間的關係。Module並不存在與程式碼層,它應該是一個結構層的概念。架構的魅力在於分而治之,抽象分離。
這期的主題系Activity分發功能Module
我們為何要分發功能module?
如果我們一個Activity的組成非常複雜,非常多內容,例如一個直播間裡面,有視訊,禮物欄,有發言,有氛圍燈非常多得功能模組,那麼我們希望將功能分開,而且每一個都有他們獨有的層級。那麼將這些功能封裝到一個Module裡面是一個很好的選擇。
我們分發功能能module的時候需要一些什麼?
(1)傳遞activity的物件
(2)Activity模組對應的ViewGroup
(3)Activity模組儲存全部View資料的Bundle saveInstance
我們使用一個ELModuleContext來儲存這些資料
當然一個Module裡面,可以佔用多個ViewGroup,所以使用了SparseArrayCompat這相容類
我們如果管理這些Module?它與Activity間如何關聯?
當然我們這些module擁有著和Activity一樣的生命週期,但是我們不一定全部的生命週期都會用到,那麼我就設定一些必要的宣告週期呼叫ModuleManager
modules儲存一些Module類名字和它持有Activity的ViewGroup
allModules儲存的是Module類名字和其Module類實體
全部的Module類實體需要繼承於ELAbsModule抽象類,裡面都是需要實現它這些生命週期方法。
這裡也提供一個Base的類,用於懶人,我們已經重寫過了
然後擴充套件一個initModule的方法來,儲存saveInstance,Activity和modules資訊例項
嵌入到一個抽象base的基類,用於回撥setContentView和moduleConfig的資訊(具體基類的實現也可以用介面的方式組合實現)
那麼到只要再繼承於這基類的Activity,那麼module就可以擁有Activity共享的生命週期了。
抽象的框架,肯定需要更多的範例支援。
在這裡ModuleBus將會擁有例子的程式碼給各位讀到這裡的同學們參考。
這裡使用一個ModuleMainActivity來提供初始的設定,
其裡面包含兩個Module,page_name和page_body,給page_name分發page_name的RelativeLayout,給page_body分發page_bodyT和page_bodyB兩個layout
當然我們需要activity的module需要依賴於這兩個次module
這裡是使用動態建立的方法來建立出我們想要的module例項
而兩個次module的樣式如下
以page_name的為例,其繼承於ELBasicModule,通過moduleContext來獲取activity和layout
然後可以通過layoutInflater來載入module本身的佈局page_name_layout
其佈局只有一個簡單的textview的title
最終page_name和page_body的顯示
然後之前有說過提供了一個跨module的通訊框架ModuleBus用於module間通訊
只要點選change_Name的按鈕,立刻可以跨module轉變title的文字。
詳細可以檢視ModuleBus的例子,希望大家覺得有用的話,歡迎給個github的星。
ModuleBus地址
我也會將這個框架封裝到ModuleBus裡面,讓更多的同學感受到它的魅力。
如果有疑問可以在留言區提問。
我也建立了一個關於Android架構學習的群,裡面可以進一步進行元件化學習的交流。
群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!
這一節就到這裡,
下一節是關於Fragment分發功能元件化的內容,將會更精彩!!!