Android組件化基礎

組件化:

組件(功能導向):單一的功能 組件,如視頻組件,支付組件,路由組件

模塊(業務導向):獨立的業務模塊,如首頁模塊,直播模塊,IM模塊。

粒度上,模塊大於組件,二者思想一致:代碼複用,業務解耦

組件化優勢:

1.避免重複造輪子,提高複用性,節約成本,提升開發效率。

2.項目間共用組件,可以確保整體技術的統一性。

3.爲插件化共用一套底層模型做準備。

模塊化優勢:

1.業務解耦,移植簡單。

2.多團隊可以根據業務並行開發和測試。

3.單個業務可以獨立打包,提高編譯速度。

4.多項目共用模塊,降低開發成本。

AndroidManifest:

APP最終只允許一個AndroidManifest,衆多module均有AndroidManifest會合並的,合併原則:

1.Activity:

合併後會自動補全一些屬性:icon,theme等,且name路徑會改爲全路徑(包名+文件名),直接 android:name =".im.ChatActivity"的形式,有可能導致找不到文件。

2.Application:

1.主module無自定義application,功能module有自定義application,引用功能module中的自定義application;

2.主module和功能module均有自定義application,解決衝突,最終引用 主module中的自定義application;

3.權限聲明:

最後彙總,會剔除不同功能module之間重複申請的權限,別擔心重複申請,每個權限只會申請一次的。也可以把權限全部寫到BaseModule中。

4.主題聲明:

Activity主題各模塊獨立,用模塊自己的定義的主題,不定義就是默認;

Application theme主題,參考最終full AndroidManifest中的主題。

5.Service:

與Activity相同。

6.shareId:

通過聲明SharedUserId,擁有同一個UserId的多個app可以配置成運行在同一個進程中,所以默認可以互相訪問任意數據。

但是功能module中聲明都是白扯,只有在主module(Application module)中聲明shareUserId才能被打包到full AndroidManifest中。

Application介紹:

application比activity創建的早,且生命週期最長,單例存在。

重要方法介紹:

onCreate()早於activity創建;

onTerminate()程序終止時調用,但不一定會被調用,系統殺死app時,不會提醒,也不會調用該方法;

onLowMermory()後臺程序已終止,且資源仍匱乏時,會調用該方法,一般來說,在這裏會釋放一些不必要的資源佔用,來應付緊張。

onConfigurationChanged()配置改變時觸發,最常見的就是旋轉屏幕。

最重要的方法:App內所有Activity的生命週期的監聽

registerActivityLifecycleCallbacks()和unregisterActivityLifecycleCallbacks()

例如獲取棧頂Activity對象。(對於dialog至關重要)

組件化中,多個module均有application,編譯時會報錯,AS的Gradle插件默認會啓用Manifest Merger Tool,如果Library中也定義了與主項目相同的屬性(例如默認生成的icon和theme)合併就會失敗。

解決編譯,失敗可以使用tools :replace = “android:icon,android:theme”,注意多個屬性用逗號分開。並且在Manifest根標籤加上 xmlns:tools=“http://schemas.android.com/tools”。否則會找不到域名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章