組件化如何實現,組件化與插件化的差別在哪裡,該怎麼選型

組件化如何實現,組件化與插件化的差別在哪裡,該怎麼選型

面試官: 組件化如何實現,組件化與插件化的差別在哪裡,該怎麼選型

心理分析:面試官從架構層次 瞭解求職者是否用過 模塊化 組件化 和插件化,在過去經驗有沒有運用過這些技術到項目中,這道題屬於一個連環炮。求職者該格外小心

求職者:應該從App開發的需求來定義技術選型,分別說說模塊化,組件化 插件化的優勢和區別

一、組件化

組件化,就是把APP拆分成不同功能模塊,形成獨立組件,讓宿主調用。 組件化不一定是插件化,組件化是一個更大的概念:把模塊解耦,組件之間代碼不依賴,宿主可以依賴組件;而插件化則具體到了技術點上,宿主通過 動態加載 來調用組件,宿主不依賴組件,達到 完全解耦 的目的(比如圖片緩存就可以看成一個組件被多個 App 共用)。

適合於項目大 但是功能相對集中。比如 一個金融類的App 裡面只包含金融的功能,金融功能又會有 借貸,理財,線下交易,把這些模塊抽成單獨的組件

二、插件化

Android程序每次更新都要下載一個完整的apk,而很多時候軟件只是更新了一個小功能而已,這樣的話,就顯得很麻煩。如果把android程序做成主程序+插件化的形式呢,這樣才利於小功能的擴展(比如一般 App 的皮膚樣式就可以看成一個插件)。

通過 gradle 配置的方式,將打 debug 包和 release 包分開。這樣會有一個好處,開發一個模塊,在 debug 的時候,可以打成一個 apk ,獨立運行測試,可以完全獨立於整個宿主 APP 的其他所有組件;待到要打 release 包的時候,再把這個模塊作為一個 library ,打成 aar ,作為整個宿主 APP 的一部分。而 debug 和 release 的切換都是通過 gradle 配置,可以做到無縫切換。至於模塊之間的跳轉,可以用別名的方式,而不是用 Activity 和 Fragment 類名。這樣所有的模塊和宿主 APP 都是完全解耦的,徹底解決了並行開發的可能造成的交叉依賴等問題。

主要原理是:主要利用 Java ClassLoader 的原理,如 Android 的 DexClassLoader,可動態加載的內容包括 apk、dex、jar 等。如下

插件化的優勢:

  • 適應並行開發,解耦各個模塊,避免模塊之間的交叉依賴,加快編譯速度,從而提高並行開發效率。
  • 滿足產品隨時上線的需求
  • 修復因為我們對自己要求不嚴格而寫出來的 bug。
  • 插件化的結果:分為穩定的 release 版本和不穩定的 snapshot 版本,每個模塊都高度解耦,沒有交叉依賴,不會出現一個模塊依賴了另一個模塊,其中一個人改了這個模塊的代碼,對另一個模塊造成影響。

淘寶的框架是用了osgi的bundle概念,整個應用框架生命週期完整。

**適合於項目超級大 但是功能相對不集中。**比如 一個支付寶App 裡面即包含共享單車 也包含 電影票。這種與本業務完全不同的 可以做成插件的形式

插件化弊端:

每一個插件都是一個apk,插件多的時候管理起來也麻煩。

需要了解更多Android面試題,可以私信小編哦!


分享到:


相關文章: