[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構

Cang_Wang發表於2016-12-29

以下是我這個系列的相關文章,有興趣可以參考一下,可以給個喜歡或者關注我的文章。

[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

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構

我們使用一個ELModuleContext來儲存這些資料

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構

當然一個Module裡面,可以佔用多個ViewGroup,所以使用了SparseArrayCompat這相容類


我們如果管理這些Module?它與Activity間如何關聯?

當然我們這些module擁有著和Activity一樣的生命週期,但是我們不一定全部的生命週期都會用到,那麼我就設定一些必要的宣告週期呼叫ModuleManager

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


modules儲存一些Module類名字和它持有Activity的ViewGroup

allModules儲存的是Module類名字和其Module類實體

全部的Module類實體需要繼承於ELAbsModule抽象類,裡面都是需要實現它這些生命週期方法。

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


這裡也提供一個Base的類,用於懶人,我們已經重寫過了

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


然後擴充套件一個initModule的方法來,儲存saveInstance,Activity和modules資訊例項

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


嵌入到一個抽象base的基類,用於回撥setContentView和moduleConfig的資訊(具體基類的實現也可以用介面的方式組合實現)

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


那麼到只要再繼承於這基類的Activity,那麼module就可以擁有Activity共享的生命週期了。

抽象的框架,肯定需要更多的範例支援。

在這裡ModuleBus將會擁有例子的程式碼給各位讀到這裡的同學們參考。

這裡使用一個ModuleMainActivity來提供初始的設定,

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


其裡面包含兩個Module,page_name和page_body,給page_name分發page_name的RelativeLayout,給page_body分發page_bodyT和page_bodyB兩個layout

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


當然我們需要activity的module需要依賴於這兩個次module

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


這裡是使用動態建立的方法來建立出我們想要的module例項

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


而兩個次module的樣式如下

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


以page_name的為例,其繼承於ELBasicModule,通過moduleContext來獲取activity和layout

然後可以通過layoutInflater來載入module本身的佈局page_name_layout

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


其佈局只有一個簡單的textview的title

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


最終page_name和page_body的顯示

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


然後之前有說過提供了一個跨module的通訊框架ModuleBus用於module間通訊

只要點選change_Name的按鈕,立刻可以跨module轉變title的文字。

詳細可以檢視ModuleBus的例子,希望大家覺得有用的話,歡迎給個github的星。

ModuleBus地址

我也會將這個框架封裝到ModuleBus裡面,讓更多的同學感受到它的魅力。

如果有疑問可以在留言區提問。

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構


我也建立了一個關於Android架構學習的群,裡面可以進一步進行元件化學習的交流。

群號是316556016,也可以掃碼進群。我在這裡期待你們的加入!!!

[Android]如何做一個崩潰率少於千分之三噶應用app(13)-Activity分發功能module架構



這一節就到這裡,

下一節是關於Fragment分發功能元件化的內容,將會更精彩!!!

相關文章