久久精品国产亚洲高清|精品日韩中文乱码在线|亚洲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é)

        千鋒教育

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

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

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

        當(dāng)前位置:首頁  >  技術(shù)干貨  > 為什么要用模塊化、組件化才能完成 Android 項目中類加載功能?

        為什么要用模塊化、組件化才能完成 Android 項目中類加載功能?

        來源:千鋒教育
        發(fā)布人:xqq
        時間: 2023-10-12 19:58:11 1697111891

        一、要用模塊化、組件化才能完成 Android 項目中類加載功能的原因

        Android項目中的類加載功能是通過Java虛擬機(JVM)實現(xiàn)的,而JVM是基于Java語言的模塊化和組件化設(shè)計思想來構(gòu)建的。因此,在Android項目中,如果要完成類加載功能,就需要使用模塊化、組件化的方法來組織代碼結(jié)構(gòu)和管理資源,以便讓JVM能夠更好地識別和加載所需的類文件。

        Android工程的組件一般分為兩種:

        application組件: 是指該組件本身就可以運行并打包成apk。lib組件: 是指該組件屬于app的一部分,可以供其它組件使用但是本身不能打包成apk。

        正常一個App中可以有多個module(模塊),但是一般只會有一個module是設(shè)置為application的,其他均設(shè)置為library; 組件化開發(fā)就是要每個module都可以運行起來,因此在開發(fā)期間每個module均設(shè)置為application,發(fā)布時再進(jìn)行合并。Android項目中代碼量達(dá)到一定程度,編譯將是一件非常痛苦的事情; 短則一兩分鐘,長則達(dá)到五六分鐘;隨著app業(yè)務(wù)的壯大,模塊越來越多,代碼量超10萬是很正常的。這個時候我們會遇到以下問題:

        稍微改動一個模塊的一點代碼都要編譯整個工程,耗時耗力公共資源、業(yè)務(wù)、模塊混在一起耦合度太高不方便測試

        組件化開發(fā)可以有效降低代碼模塊的耦合度,使代碼架構(gòu)更加清晰,同時模塊化的編譯可以有效減少編譯時間,當(dāng)然總的編譯時間是不會減少的,只是App模塊化之后開發(fā)某個模塊時,只需要編譯特定模塊,可以快速編譯調(diào)試。通過模塊化和組件化,可以將整個應(yīng)用分解為多個模塊或組件,并將其編譯成不同的二進(jìn)制文件,從而實現(xiàn)代碼的復(fù)用和靈活性。同時,模塊化和組件化還能簡化開發(fā)流程、提高代碼質(zhì)量,并使代碼更易于維護(hù)和升級。

        二、模塊化、組件化和插件化簡介

        在 Android 中,組件化、插件化和模塊化都是很常見的架構(gòu)設(shè)計手段,用于提高應(yīng)用開發(fā)的靈活性、擴(kuò)展性和復(fù)用性。組件化、插件化和模塊化可以混合使用,根據(jù)項目的需求和規(guī)模選擇合適的方案。

        1、模塊化

        模塊化最初的目的是將同一類型的代碼整合在一起; 所以模塊的功能相對復(fù)雜,但都同屬于一個業(yè)務(wù);不同模塊之間也會存在依賴關(guān)系; 但大部分都是業(yè)務(wù)性的互相跳轉(zhuǎn),從地位上來說它們都是平級的。模塊化編程是一種軟件設(shè)計技術(shù),強調(diào)將程序的功能分離為獨立的可互換模塊,因此每個模塊都包含僅執(zhí)行所需功能的一個方面所需的一切。簡單來說就是:模塊化是將功能拆分,分成相互獨立的模塊,以便于每個模塊只包含與其自身功能相關(guān)的內(nèi)容。

        特點:

        分屬同一功能/業(yè)務(wù)的代碼進(jìn)行隔離(分裝)成獨立的模塊,可以獨立運行; 以頁面、功能或其他不同粒度劃分程度不同的模塊,位于業(yè)務(wù)框架層,模塊間通過接口調(diào)用,目的是降低模塊間的耦合,由之前的主應(yīng)用與模塊耦合,變?yōu)橹鲬?yīng)用與接口耦合,接口與模塊耦合;模塊就像有多個USB插口的充電寶,可以和多部手機充電,接口可以隨意插拔,復(fù)用性很強,可以獨立管理; 模塊就像是獨立的功能和項目(如淘寶:注冊、登錄、購物、直播…),可以調(diào)用組件來組成模塊,多個模塊可以組合成業(yè)務(wù)框架。

        模塊化設(shè)計是將整個項目按照功能模塊進(jìn)行拆分,在開發(fā)期間更加方便地進(jìn)行分工協(xié)作。和組件化不同,模塊化并不是將業(yè)務(wù)邏輯拆分到不同的組件內(nèi)部,而是將整個項目按照業(yè)務(wù)模塊進(jìn)行邏輯的劃分。在實現(xiàn)模塊化的過程當(dāng)中,可以采用以下步驟

        確定項目中每個模塊的職責(zé)和功能。使用 Gradle 等自動化工具來管理每個模塊的依賴關(guān)系。使用業(yè)務(wù)相關(guān)的命名空間來劃分代碼的功能,從而實現(xiàn)模塊化。定義接口或抽象類來規(guī)范模塊之間的交互,避免相互依賴。

        2、組件化

        組件化最初的目的是代碼重用,功能相對單一或者獨立; 在整個系統(tǒng)的代碼層次上位于最底層,被其他代碼所依賴,所以說組件化是縱向分層?;诮M件的軟件工程 (CBSE) 也稱為基于組件的發(fā)展 (CBD),是軟件工程的一個分支,它強調(diào)在給定軟件系統(tǒng)中提供的廣泛功能方面的關(guān)注點分離。它是一種基于重用的方法,用于定義、實現(xiàn)和組合松散耦合的獨立組件到系統(tǒng)中。這種做法旨在為軟件本身和贊助此類軟件的組織在短期和長期帶來同樣廣泛的利益。簡單來說就是:組件化就是基于可重用為目的的,將一個大的軟件系統(tǒng)按照分離關(guān)注點的形式,拆分多個獨立的組件,減少耦合。

        組件化的核心思想是將業(yè)務(wù)拆分成獨立的模塊,利用模塊間的相互獨立性,將不同業(yè)務(wù)模塊分割成不同的組件。這樣可以提高代碼的可復(fù)用性、可維護(hù)性和可拓展性。在實際開發(fā)中,可以采用以下步驟來實現(xiàn)組件化:

        將項目按照不同的業(yè)務(wù)模塊進(jìn)行拆分。使用路由框架來實現(xiàn)模塊與模塊之間的跳轉(zhuǎn)(通常使用 ARouter)。采用組件化設(shè)計模式,將組件間的依賴關(guān)系進(jìn)行清晰地規(guī)劃和管理,包括使用接口或抽象類定義組件的標(biāo)準(zhǔn)、使用消息機制來解耦組件之間的關(guān)系等。在代碼實現(xiàn)時要注意各個模塊之間的耦合度,避免出現(xiàn)相互依賴、難以維護(hù)的情況。

        特點:

        把重復(fù)的代碼提取出來合并成為一個個組件,組件最重要的就是重用(復(fù)用),位于框架最底層,其他功能都依賴于組件,可供不同功能使用,獨立性強組件就像一個個小的單位,多個組件可以組合成組件庫,方便調(diào)用和復(fù)用,組件間也可以嵌套,小組件組合成大組件

        3、插件化

        插件化是指將應(yīng)用程序的一部分功能打包成一個插件,通過動態(tài)加載和卸載實現(xiàn)功能的增減。插件化相比于常規(guī)的 apk 開發(fā),更加靈活,能夠動態(tài)的添加功能模塊,且不需要重新編譯打包整個應(yīng)用程序,縮小了應(yīng)用程序的體積。插件化的主要思想就是將應(yīng)用的某些功能模塊以插件的形式動態(tài)加載到主工程中,從而實現(xiàn)應(yīng)用動態(tài)化、組件化、靈活化、輕量化等一系列的好處。

        插件化的實現(xiàn)步驟如下:

        開發(fā)插件化應(yīng)用之前,需要先寫一套基于插件化框架的核心代碼,包括插件的加載、安裝、卸載和類加載等邏輯。編寫插件模塊時,需要將代碼寫成插件模式,即將代碼和資源打包成一個 APK,并且確保插件與主工程是相互獨立、互不干擾的。主工程需要能夠動態(tài)地加載某些插件,并進(jìn)行跳轉(zhuǎn)和使用。需要考慮插件與主工程之間的數(shù)據(jù)傳遞、通信和資源共享等問題,從而實現(xiàn)完整的插件化功能。

        特點:

        宿主和插件分開編譯并發(fā)開發(fā)動態(tài)更新插件按需下載模塊方法數(shù)或變量數(shù)爆棚插件無需安裝即可運行

        延伸閱讀1:組件化開發(fā)的優(yōu)點

        業(yè)務(wù)模塊分開,每個模塊可以獨立開發(fā)編譯運行,解耦的同時也降低了項目的復(fù)雜度開發(fā)單個模塊時可以共享資源和工具類可以針對單個模塊測試, 開發(fā)調(diào)試時不需要對整個項目進(jìn)行編譯多人合作時可以只關(guān)注自己的業(yè)務(wù)模塊,把某一業(yè)務(wù)當(dāng)成單一項目來開發(fā)可以靈活的對業(yè)務(wù)模塊進(jì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
        想開發(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
        數(shù)據(jù)庫應(yīng)該怎么設(shè)計比較好?

        一、數(shù)據(jù)庫的設(shè)計方法1、需求分析在設(shè)計數(shù)據(jù)庫之前,仔細(xì)分析和理解業(yè)務(wù)需求。了解數(shù)據(jù)的類型、關(guān)系和操作模式,明確數(shù)據(jù)的目標(biāo)和用途。與相關(guān)...詳情>>

        2023-10-12 20:44:36
        快速通道
        开阳县| 侯马市| 蓬莱市| 揭西县| 金乡县| 遵义县| 奉新县| 福海县| 无棣县| 徐水县| 台江县| 西贡区| 瑞昌市| 富宁县| 彰化市| 临猗县| 郎溪县| 逊克县| 呼和浩特市| 庆阳市| 旌德县| 清水河县| 资中县| 通城县| 邹城市| 平罗县| 江阴市| 梅河口市| 名山县| 金坛市| 洞口县| 仙桃市| 高要市| 广河县| 改则县| 额济纳旗| 阳原县| 江油市| 杭锦后旗| 惠州市| 青河县|