組件化:
組件(功能導向):單一的功能 組件,如視頻組件,支付組件,路由組件
模塊(業務導向):獨立的業務模塊,如首頁模塊,直播模塊,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”。否則會找不到域名。