久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲va中文字幕无码久|伊人久久综合狼伊人久久|亚洲不卡av不卡一区二区|精品久久久久久久蜜臀AV|国产精品19久久久久久不卡|国产男女猛烈视频在线观看麻豆

    1. <style id="76ofp"></style>

      <style id="76ofp"></style>
      <rt id="76ofp"></rt>
      <form id="76ofp"><optgroup id="76ofp"></optgroup></form>
      1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

        手機站
        千鋒教育

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

        千鋒教育

        掃一掃進入千鋒手機站

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

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

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

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

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

        一、Android組件化含義

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

        二、為什么要Android組件化

        1、提高工程編譯速度

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

        2、利于多人團隊協(xié)作開發(fā)

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

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

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

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

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

        5、降低組件間的耦合

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

        代碼更便于維護降低了模塊的Bug率

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

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

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

        2、隱式跳轉(zhuǎn)

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

        3、ARouter跳轉(zhuǎn)

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

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

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

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

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

        app殼:負(fù)責(zé)管理各個業(yè)務(wù)組件和打包APK,沒有具體的業(yè)務(wù)功能;業(yè)務(wù)組件層:最上層的業(yè)務(wù),每個組件表示一條完整的業(yè)務(wù)線,彼此之間相互獨立;功能/基礎(chǔ)組件層:支撐上層業(yè)務(wù)組件運行的基礎(chǔ)業(yè)務(wù)服務(wù);基礎(chǔ)庫:包含了各種開源庫以及和業(yè)務(wù)無關(guān)的一個自研工具庫。
        聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
        10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
        請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
        免費領(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ù)庫這么喜歡用kv store?

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

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

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

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

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

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

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

        2023-10-12 21:31:42
        設(shè)計移動端表單有哪些注意事項?

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

        2023-10-12 20:59:19
        新疆| 定襄县| 台州市| 胶州市| 平乐县| 古交市| 惠水县| 内江市| 肥西县| 和平县| 和硕县| 仲巴县| 澜沧| 璧山县| 太保市| 原平市| 宜城市| 潢川县| 宁津县| 甘泉县| 涞源县| 玛曲县| 中宁县| 丹寨县| 普兰店市| 古交市| 英德市| 铜陵市| 社旗县| 腾冲县| 丰县| 都匀市| 青海省| 任丘市| 青岛市| 肥乡县| 阿拉善右旗| 萍乡市| 宜良县| 临洮县| 封开县|