天天看點

APP元件化與插件化華山論劍

目錄:

APP項目如何與插件化無縫結合(一) 

APP項目如何與插件化無縫結合(二) 

APP項目如何與插件化無縫結合(三)

元件化與插件化華山論劍

碼字不易,轉載請注明轉自:http://blog.csdn.net/u011176685/article/details/52198709

閱讀這篇文章前,建議大家把前面三章大概看下,内容可以會有點多,有了前面幾章,你會更加了解這篇文章。

好吧,廢話不多說。當我們把插件化把Small有一定了解之後,慢慢的就需要實戰,運用到自己的項目當中。我簡單的介紹下我們公司的項目,通過它,你會對元件化有一定的了解。關于元件化和插件化的概念我在APP項目如何與插件化無縫結合(一)中有提到過,這裡就不多說了。我們公司項目現階段用的元件化方案。我把公司不老頑童城鞍果果(我們給他取的外号),當初推行元件化的做的demo先進行分享下,後面再把自己做的插件化的demo進行簡單的對比,希望對有需要的同學,有所幫助。我們項目是最近才從Eclipse遷移到Android Studio。我把他做的demo轉成了Android Studio的。後面會提供下載下傳連結。因為demo有點久遠,我們其實也對demo進行改進了很多。是以說demo僅供參考,後期我們也會做一些整體架構的分享。

一、先上效果圖

APP元件化與插件化華山論劍

以demo為例,因為我們是做平台的業務,是以就把支付,訂單,聊天拆分為三個元件。訂單去支付的時候會去查詢支付的一個狀态。元件化其實是采用事件總線EventBus的設計,關于EventBus是什麼,這裡不詳細介紹了。自行查資料吧,網上很多說明。 demo看上去很簡單,我們看看裡面的代碼。

二、目錄結構

APP元件化與插件化華山論劍

三、各個類說明

APP元件化與插件化華山論劍

1.采用訂閱釋出模式(Subscribe/Publish),我隻挑幾個比較重要的類進行說明,demo裡面的注釋很詳細,ZbjBundleConfig這個類是元件的總配置,其他元件都需要在這裡統一進行注冊配置,才能支援跳轉通路。

APP元件化與插件化華山論劍

2.ZbjContainer定義了元件跳轉的方法和統一管理Activity的生命周期,我們先來看看元件跳轉規則。

APP元件化與插件化華山論劍

元件群組件之間的資料傳遞都是通過bundle來的,這個地方可以留意下,後面對比下插件化的資料傳遞。我們再來看看元件之間消息通訊的橋梁是如何搭建的。

APP元件化與插件化華山論劍

城鞍果果注釋寫的很詳細,大家看下注釋應該可以清楚。

我們接下來再來看看如何統一管理Activity的生命周期。

APP元件化與插件化華山論劍

3.元件化的思想,原本就是朝着高内聚,低耦合的方向,但是元件之間難免還是會有些資料的傳遞。接下來看看,元件之間如何傳遞,其實也比較簡單,就是通過系統自帶的bundle。看了下圖,相信一下就明白了。

APP元件化與插件化華山論劍

這個就是示範動畫支付按鈕的監聽事件,把bundle作為參數傳給支付元件,然後根據支付元件回調傳回來的錯誤碼,進行相應的事件ui處理。

4.最好再看看scheme.txt檔案,裡面主要是配置每個元件調用參數的規則

APP元件化與插件化華山論劍

元件化就先寫到這來,接下來看看插件化。

四、插件化

插件化其實群組件化有點相似。我認為插件化應該是元件化的一個進階,或者說一個很大的變動。結合Small,它将更加簡潔,耦合度更低。具備元件化該有的功能優點。同時還可以解決APP開發動态更新修複的心中刺,關于插件化的優點,我在APP項目如何與插件化無縫結合(一)裡面也提過。不過,對于選擇插件化還是元件化還是得根據你們現有的時間,人力,資源等各方面來考慮,插件化的工程比元件化建設要大很多。先來看看效果圖。

五、插件化效果圖

APP元件化與插件化華山論劍

哈哈,是不是覺得群組件化界面很像?前面可能會有點多,還沒消化。放心,後面的插件化demo的介紹會很簡單的。比元件化簡單很多。

六、插件化Demo目錄結構

APP元件化與插件化華山論劍

該demo是把small內建進來簡單設計的,你需要了解Small的使用,并且對samll有一定了解。不然,你可能編譯都編譯不過。這個demo需要執行Build lib, Build bundle。app是我的宿主,app.chart,app.pay,app.user分别是聊天,支付,使用者插件。

七、插件化代碼簡介

APP元件化與插件化華山論劍

插件化的配置是在bundle.json這個檔案來制定規則。

APP元件化與插件化華山論劍

插件之間的跳轉是通過Small.operUrl()這個方法來實作插件之間的互相通路。資料的傳遞是通過url的方式來的。如“pay?orderId=12345&uid=111”。我們還是來看看如何取的。上圖跳轉支付插件附帶參數orderId和uid.

APP元件化與插件化華山論劍

通過url的形式來取得相應的參數的值。我們可能會遇到一種場景插件A跳插件B,可能需要查詢B處理的一個狀态,對應的就是,訂單插件把訂單id傳給支付插件,支付成功或失敗會有一個狀态,因為是基于Small的。是以暫時隻能通過本地廣播LocalBroadcastManager來處理。

APP元件化與插件化華山論劍

八、總結

關于插件化如何更新更新,APP項目如何與插件化無縫結合(三)這裡有提過,我就不再提了。這裡的内容是基于前面三章都看過了的。

可以看到同樣的效果,插件化比元件化簡潔很多。但是其實也隐藏着一個隐患,因為元件化是自己設計的,有bug,有調整,改動起來會很友善。而插件化是用的Small,如果出問題或者沒有維護了,去修改很麻煩。是以說,各有優缺點,得根據現有的各方面資源來合理選擇。然而與我而言,插件化的優點,很吸引我。我是非常推薦實行項目插件化。

九、Demo下載下傳位址

元件化demo下載下傳位址:

GitHub:https://github.com/hongxialiu/ZbjContainer

CSDN:http://download.csdn.net/detail/u011176685/9602331 

插件化Demo下載下傳位址:

GitHub:https://github.com/hongxialiu/ZbjPlugins 

CSDN:http://download.csdn.net/detail/u011176685/9602336 

如果覺得不錯,歡迎關注微信公衆号和點贊。您的點贊是我分享的動力!!

APP元件化與插件化華山論劍