日韩欧乱色一区二区三区在线_久久―日本道色综合久久_欧美日本一区二区_网曝91综合精品门事件在线

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

手機(jī)站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時(shí)隨地免費(fèi)學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機(jī)站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時(shí)隨地免費(fèi)學(xué)習(xí)課程

當(dāng)前位置:首頁(yè)  >  技術(shù)干貨  > 什么是Android組件化,為什么要組件化?

什么是Android組件化,為什么要組件化?

來(lái)源:千鋒教育
發(fā)布人:xqq
時(shí)間: 2023-10-12 20:36:56 1697114216

一、Android組件化含義

組件化是指解耦復(fù)雜系統(tǒng)時(shí),將多個(gè)功能模板拆分、重組的過(guò)程。在Android工程表現(xiàn)上就是把a(bǔ)pp按照其業(yè)務(wù)的不同,劃分為不同的Module。組件化架構(gòu)的目的就是讓每個(gè)業(yè)務(wù)模塊變得相對(duì)獨(dú)立,各個(gè)組件在組件模式下可以獨(dú)立開(kāi)發(fā)調(diào)試,集成模式下又可以集成到“app殼工程”中,從而得到一個(gè)具有完整功能的APP。

二、為什么要Android組件化

1、提高工程編譯速度

進(jìn)行組件化拆分后,每個(gè)業(yè)務(wù)或者功能都是一個(gè)單獨(dú)的工程,這個(gè)單獨(dú)的工程可以獨(dú)立編譯運(yùn)行,拆分后的工程通常都比較小,代碼量也比較少,我再也不用像以前編譯一下得等待好幾分鐘了。

2、利于多人團(tuán)隊(duì)協(xié)作開(kāi)發(fā)

業(yè)務(wù)組件之間不能相互引用,每個(gè)組件都把對(duì)應(yīng)的業(yè)務(wù)功能收斂在一個(gè)工程里,彼此互不打擾。 在多人團(tuán)隊(duì)里,每個(gè)人只負(fù)責(zé)自己的業(yè)務(wù)模塊,他對(duì)業(yè)務(wù)功能的增刪改查,都只限定在自己的這個(gè)業(yè)務(wù)模塊里,不會(huì)影響其他人的業(yè)務(wù),他代碼質(zhì)量的好壞也只會(huì)影響到自己的業(yè)務(wù)模塊;對(duì)測(cè)試來(lái)說(shuō),也十分方便,大部分情況下,我們只需要著重測(cè)試修改過(guò)的業(yè)務(wù)組件即可,而不用老是進(jìn)行全部回歸測(cè)試。

3、組件化是功能重用的基石

業(yè)務(wù)組件類似一個(gè)個(gè)積木一樣,我們可以用積木搭建出不同的房子,同理我們也可以創(chuàng)建多個(gè)不同的APP。我們只需要維護(hù)好每個(gè)組件,需要用到該組件的功能時(shí),一建引用集成就可以了。

4、提高組件復(fù)用性

可能有些人會(huì)覺(jué)得,提高復(fù)用性很簡(jiǎn)單,直接把需要復(fù)用的代碼做成Android Module,打包AAR并上傳代碼倉(cāng)庫(kù),那么這部分功能就能被方便地引入和使用。但是我們覺(jué)得僅僅這樣是不夠的,上傳倉(cāng)庫(kù)的AAR庫(kù)是否方便被復(fù)用,需要組件化的規(guī)則來(lái)約束,這樣才能提高復(fù)用的便捷性。

5、降低組件間的耦合

我們需要通過(guò)組件化的規(guī)則把代碼拆分成不同的模塊,模塊要做到高內(nèi)聚、低耦合。模塊間也不能直接調(diào)用,這需要組件化通信框架的支持。降低了組件間的耦合性可以帶來(lái)兩點(diǎn)直接的好處:

代碼更便于維護(hù)降低了模塊的Bug率

三、Android組件化基礎(chǔ)

1、組件之間的跳轉(zhuǎn)

組件化中兩個(gè)功能模塊時(shí)不直接依賴的,其依賴規(guī)則是通過(guò) Base module 間接依賴,當(dāng)組件之間的 Activity 進(jìn)行界面跳轉(zhuǎn)時(shí),由于沒(méi)有相互依賴的關(guān)系,往往會(huì)無(wú)法引用另一個(gè) module 中的 Activity。

2、隱式跳轉(zhuǎn)

隱式跳轉(zhuǎn)是通過(guò) Android 原生 Intent 匹配機(jī)制來(lái)實(shí)現(xiàn)相應(yīng)跳轉(zhuǎn),就是使用 Action 來(lái)跳轉(zhuǎn)到對(duì)應(yīng)的 Activity,這樣使用隱式跳轉(zhuǎn)的方式就可以跨 module 實(shí)現(xiàn) Activity 之間的跳轉(zhuǎn)了,注意一點(diǎn),如果移出 Activity 所在的 module 而不移出相應(yīng)的跳轉(zhuǎn),如果繼續(xù)跳轉(zhuǎn)會(huì)出現(xiàn)異常,使用隱式 Intent 跳轉(zhuǎn)需要驗(yàn)證是否會(huì)接收該 Intent,需要對(duì)該 Intent 對(duì)象調(diào)用 resolveActivity() 方法來(lái)判斷至少有一個(gè)應(yīng)用能夠處理該 Intent,通過(guò)隱式跳轉(zhuǎn)的方式還可以設(shè)置 exported 為 false 來(lái)確保只有自己的 App 才能夠啟動(dòng)對(duì)應(yīng)的組件。

3、ARouter跳轉(zhuǎn)

在 Android 開(kāi)發(fā)中可將 module 看成不同的網(wǎng)絡(luò),而對(duì)應(yīng)的 Router 就是連接各個(gè) module 的中轉(zhuǎn)站,這個(gè)中轉(zhuǎn)站可以對(duì)頁(yè)面跳轉(zhuǎn)的參數(shù)等進(jìn)行統(tǒng)一處理,ARouter 是阿里開(kāi)源出來(lái)的一個(gè)頁(yè)面跳轉(zhuǎn)路由,使用 ARouter 可以替代隱式跳轉(zhuǎn)來(lái)完成不同 module、不同組件之間的跳轉(zhuǎn)以及跳轉(zhuǎn)過(guò)程的監(jiān)聽(tīng)、參數(shù)的傳遞等,ARouter 支持路徑跳轉(zhuǎn)和 URL 跳轉(zhuǎn)兩種方式,使用也非常靈活,ARouter 的具體使用這里不做介紹,其具體使用會(huì)在單獨(dú)一篇文章中詳解,ARouter 與 Android 傳統(tǒng)跳轉(zhuǎn)方式的對(duì)比如下:

顯示跳轉(zhuǎn)需要依賴于類,而路由跳轉(zhuǎn)通過(guò)指定的路徑跳轉(zhuǎn);隱式跳轉(zhuǎn)通過(guò) AndroidManifest 集中管理,導(dǎo)致協(xié)作開(kāi)發(fā)困難;原生使用 AndroidManifest 來(lái)注冊(cè),而路由使用注解注冊(cè)原生 startActivity 之后跳轉(zhuǎn)過(guò)程交由 Android 系統(tǒng)控制,而路由跳轉(zhuǎn)采用的是 AOP 切面編程可對(duì)跳轉(zhuǎn)過(guò)程進(jìn)行攔截和過(guò)濾。

4、動(dòng)態(tài)創(chuàng)建

組件化開(kāi)發(fā)中最重要的一點(diǎn)就是各個(gè)模塊、各個(gè)組件之間要盡可能解耦,這樣很容易就會(huì)想到使用 Java 中的反射機(jī)制,使用反射可在運(yùn)行狀態(tài)下獲取某個(gè)類的所有信息,然后就可以動(dòng)態(tài)操作這個(gè)類的屬性和方法了。如果 Fragment 單獨(dú)作為一個(gè)組件來(lái)使用時(shí),當(dāng)這個(gè) Fragment 組件不需要被移出后,如果是常規(guī)的 Fragment 則會(huì)因?yàn)樗饕坏皆?Fragment 而使得 App 崩潰,想一下如果使用反射創(chuàng)建 Fragment 的方式則至少不會(huì)引起 App 崩潰,這里可以捕捉異常完成相關(guān)邏輯,這樣是不是降低了耦合呢。可見(jiàn),雖然反射有一定的性能問(wèn)題,但使用反射確實(shí)能在一定程度上降低耦合,學(xué)習(xí)組件化 Java 反射機(jī)制應(yīng)該是必須的一部分。

延伸閱讀1:組件化結(jié)構(gòu)

app殼:負(fù)責(zé)管理各個(gè)業(yè)務(wù)組件和打包APK,沒(méi)有具體的業(yè)務(wù)功能;業(yè)務(wù)組件層:最上層的業(yè)務(wù),每個(gè)組件表示一條完整的業(yè)務(wù)線,彼此之間相互獨(dú)立;功能/基礎(chǔ)組件層:支撐上層業(yè)務(wù)組件運(yùn)行的基礎(chǔ)業(yè)務(wù)服務(wù);基礎(chǔ)庫(kù):包含了各種開(kāi)源庫(kù)以及和業(yè)務(wù)無(wú)關(guān)的一個(gè)自研工具庫(kù)。
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
請(qǐng)您保持通訊暢通,專屬學(xué)習(xí)老師24小時(shí)內(nèi)將與您1V1溝通
免費(fèi)領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
為什么分布式數(shù)據(jù)庫(kù)這么喜歡用kv store?

一、為什么分布式數(shù)據(jù)庫(kù)這么喜歡用kv store雖然不論是單機(jī)數(shù)據(jù)庫(kù)(MySQL、PostgreSQL等等),還是題主說(shuō)到的分布式數(shù)據(jù)庫(kù)(CockroachDB、TiDB)...詳情>>

2023-10-12 22:21:18
想開(kāi)發(fā)一款直播交友APP需要有哪些功能?

一、想開(kāi)發(fā)一款直播交友APP需要的功能 1、直播功能:用戶可以選擇視頻一對(duì)一直播和語(yǔ)音一對(duì)一直播兩種方式,觀眾需要支付直播費(fèi)用,直播費(fèi)用由...詳情>>

2023-10-12 21:47:55
物聯(lián)網(wǎng)云平臺(tái)用什么數(shù)據(jù)庫(kù)?

一、物聯(lián)網(wǎng)云平臺(tái)的數(shù)據(jù)庫(kù)1、關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)例如MySQL、PostgreSQL、Oracle等。關(guān)系型數(shù)據(jù)庫(kù)以表格的形式存儲(chǔ)數(shù)據(jù),并使用SQL(Structur...詳情>>

2023-10-12 21:41:25
ACTION_CANCEL到底何時(shí)觸發(fā),滑出子View范圍會(huì)發(fā)生什么?

一、ACTION_CANCEL在這些時(shí)候會(huì)觸發(fā)1、父view攔截事件首先要了解ViewGroup什么情況下會(huì)攔截事件,請(qǐng)看下面一段代碼:@Overridepublic boolean d...詳情>>

2023-10-12 21:31:42
設(shè)計(jì)移動(dòng)端表單有哪些注意事項(xiàng)?

1、分布式表單iPhone目前主要的機(jī)型屏幕尺寸在4.7-5.8英寸,android的尺寸更多一些,但是總體上來(lái)說(shuō),移動(dòng)端的載體手機(jī)屏幕不大,能承載的信息...詳情>>

2023-10-12 20:59:19
快速通道
主站蜘蛛池模板: 邵武市| 茌平县| 乌什县| 英超| 合川市| 南丰县| 乐安县| 卢湾区| 榆林市| 威信县| 洛扎县| 丰镇市| 甘谷县| 云梦县| 盐边县| 阿鲁科尔沁旗| 安阳市| 申扎县| 抚松县| 成安县| 阜康市| 毕节市| 新余市| 荆州市| 手机| 渝中区| 驻马店市| 磐石市| 彰化县| 漳州市| 红原县| 开阳县| 巫溪县| 原阳县| 如皋市| 淅川县| 泰宁县| 陈巴尔虎旗| 江山市| 綦江县| 溧阳市|