中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

手機(jī)做網(wǎng)站用什么軟件灰色詞排名推廣

手機(jī)做網(wǎng)站用什么軟件,灰色詞排名推廣,免費(fèi)的php網(wǎng)站模板,北京有幾個(gè)區(qū)幾個(gè)縣組件化項(xiàng)目,通過gradle腳本,實(shí)現(xiàn)module在編譯期隔離,運(yùn)行期按需加載,實(shí)現(xiàn)組件間解耦,高效單獨(dú)調(diào)試。 先來一張效果圖 組件化初衷 APP版本不斷的迭代,新功能的不斷增加,業(yè)務(wù)也會(huì)變的越來越復(fù)雜…

組件化項(xiàng)目,通過gradle腳本,實(shí)現(xiàn)module在編譯期隔離,運(yùn)行期按需加載,實(shí)現(xiàn)組件間解耦,高效單獨(dú)調(diào)試。

先來一張效果圖

img

組件化初衷

  • APP版本不斷的迭代,新功能的不斷增加,業(yè)務(wù)也會(huì)變的越來越復(fù)雜,維護(hù)成本高。
  • 業(yè)務(wù)耦合度高,代碼越來越臃腫,團(tuán)隊(duì)內(nèi)部多人協(xié)作開發(fā)困難。
  • Android項(xiàng)目在編譯代碼的時(shí)候電腦會(huì)非???#xff0c;又因?yàn)閱我还こ滔麓a耦合嚴(yán)重,每修改一處代碼后都要重新編譯打包測(cè)試,導(dǎo)致非常耗時(shí)。
  • 方便單元測(cè)試,改動(dòng)單獨(dú)一個(gè)業(yè)務(wù)模塊,不需要著重于關(guān)注其他模塊被影響。

什么是組件化

組件化就是將一個(gè)app分成多個(gè)Module,如下圖,每個(gè)Module都是一個(gè)組件(也可以是一個(gè)基礎(chǔ)庫供組件依賴),開發(fā)的過程中我們可以單獨(dú)調(diào)試部分組件,組件間不需要互相依賴,但可以相互調(diào)用,最終發(fā)布的時(shí)候所有組件以lib的形式被主app工程依賴并打包成一個(gè)apk。

img

組件化優(yōu)勢(shì)

  • 組件化就是將通用模塊獨(dú)立出來,統(tǒng)一管理,以提高復(fù)用,將頁面拆分為粒度更小的組件,組件內(nèi)部除了包含UI實(shí)現(xiàn),還包含數(shù)據(jù)層和邏輯層。
  • 每個(gè)工程都可以獨(dú)立編譯、加快編譯速度,獨(dú)立打包。
  • 每個(gè)工程內(nèi)部的修改,不會(huì)影響其他工程。
  • 業(yè)務(wù)庫工程可以快速拆分出來,集成到其他App中。
  • 迭代頻繁的業(yè)務(wù)模塊采用組件方式,業(yè)務(wù)線研發(fā)可以互不干擾、提升協(xié)作效率,并控制產(chǎn)品質(zhì)量,加強(qiáng)穩(wěn)定性。
  • 并行開發(fā),團(tuán)隊(duì)成員只關(guān)注自己的開發(fā)的小模塊,降低耦合性,后期維護(hù)方便等。

指導(dǎo)思想

  • 組件拆分:將一個(gè)project劃分成業(yè)務(wù)組件、基礎(chǔ)組件、路由組件。其中業(yè)務(wù)組件是相互隔離的,可以單獨(dú)調(diào)試,基礎(chǔ)組件提供業(yè)務(wù)組件所公用的功能,路由組件為業(yè)務(wù)組件之間通信提供支持。
  • 組件隔離:業(yè)務(wù)組件之間的隔離,可以單獨(dú)調(diào)試。
  • 核心法則:編譯期隔離,運(yùn)行期按需依賴。

依賴關(guān)系

img

組件化需要考慮的問題

  • 模式切換:如何使得APP在單獨(dú)調(diào)試跟整體調(diào)試自由切換
  • 資源沖突:當(dāng)我們創(chuàng)建了多個(gè)Module的時(shí)候,如何解決相同資源文件名合并的沖突
  • 依賴關(guān)系:多個(gè)Module之間如何引用一些共同的library以及工具類
  • 組件通信:組件化之后,Module之間是相互隔離的,如何進(jìn)行UI跳轉(zhuǎn)以及方法調(diào)用
  • 入口參數(shù):我們知道組件之間是有聯(lián)系的,所以在單獨(dú)調(diào)試的時(shí)候如何拿到其它的Module傳遞過來的參數(shù)

組件化后項(xiàng)目結(jié)構(gòu)如下圖

img

理論說了那么多,下面開始擼代碼

實(shí)現(xiàn)步驟

1、全局設(shè)置Gradle,每一個(gè)業(yè)務(wù)Module需要的版本都定義在這里方便后期維護(hù)多個(gè)Module版本號(hào)

ext {// Sdk and toolsminSdkVersion = 16targetSdkVersion = 26compileSdkVersion = 26buildToolsVersion = '26.0.2'supportLibraryVersion = '26.1.0'// App dependenciesaRouter = '1.2.2'leakcanaryVersion = '1.3'glideVersion = '3.7.0'
}####每個(gè)業(yè)務(wù)Module編譯依賴版本compileSdkVersion rootProject.ext.compileSdkVersionbuildToolsVersion rootProject.ext.buildToolsVersionminSdkVersion rootProject.ext.minSdkVersiontargetSdkVersion rootProject.ext.targetSdkVersion

2、模式切換

組件化后的每一個(gè)業(yè)務(wù)的module都可以是一個(gè)單獨(dú)的APP(isModuleRun=false), release 包的時(shí)候各個(gè)業(yè)務(wù)module作為lib依賴,這里完全由一個(gè)變量控制,在根項(xiàng)目 gradle.properties里面的 isModuleRun=true。

isModuleRun狀態(tài)不同,加載application和AndroidManifest都不一樣,以此來區(qū)分是獨(dú)立的APK還是lib, 實(shí)現(xiàn)方式如下 在build.grade里面配置

if (isModuleRun.toBoolean()) {apply plugin: 'com.android.application'
} else {apply plugin: 'com.android.library'
}##單Module運(yùn)行需要配置
sourceSets {main {if (isModuleRun.toBoolean()) {manifest.srcFile 'src/main/debug/AndroidManifest.xml'} else {manifest.srcFile 'src/main/AndroidManifest.xml'java {//全部Module一起編譯的時(shí)候剔除debug目錄exclude '**/debug/**'}}}}

3、資源沖突

業(yè)務(wù)Module和BaseModule資源文件名稱重復(fù)會(huì)產(chǎn)生沖突,解決方案在 每個(gè) module 都有 app_name,為了不讓資源名重名,在每個(gè)組件的 build.gradle 中增加 resourcePrefix “xxx_強(qiáng)行檢查資源名稱前綴。 固定每個(gè)組件的資源前綴。但是 resourcePrefix 這個(gè)值只能限定 xml 里面的資源,并不能限定圖片資源。 個(gè)人認(rèn)為約定大于配置,團(tuán)隊(duì)內(nèi)協(xié)定好規(guī)范,可以避免沖突。

4、組件通訊 組件通訊框架在github上有star最多的有ARouter和ActivityArouter,前者是個(gè)人項(xiàng)目,后者是阿里巴巴開源,權(quán)衡之下選擇阿里的ARouter, 各業(yè)務(wù)Module之前不需要任何依賴可以通過路由跳轉(zhuǎn),完美解決業(yè)務(wù)之間耦合 使用方式如下。

 if (BuildConfig.DEBUG) {   // 這兩行必須寫在init之前,否則這些配置在init過程中將無效ARouter.openLog();     // 打印日志ARouter.openDebug();   // 開啟調(diào)試模式(如果在InstantRun模式下運(yùn)行,必須開啟調(diào)試模式!線上版本需要關(guān)閉,否則有安全風(fēng)險(xiǎn))}
ARouter.init(this); // 盡可能早,推薦在Application中初始化
compile "com.alibaba:arouter-api:$rootProject.aRouter"
每個(gè)業(yè)務(wù)Module都需要添加注解
annotationProcessor 'com.alibaba:arouter-compiler:1.1.3'

跳轉(zhuǎn)方法 在目標(biāo)Activity上添加path

@Route(path = ARouterManager.BModuleActivity)
public class BModuleActivity extends BaseActivity {@Autowiredpublic String name;@Autowired(name = "age")int age;TextView txt;@Overrideprotected int getLayoutId() {return R.layout.b_module_layout;}@Overrideprotected void initView() {txt = findViewById(R.id.txt);//String name = getIntent().getStringExtra("name"); 也可以這樣接受參數(shù)ARouter.getInstance().inject(this);txt.setText("name:" + name + ",age:" + age);#開始跳轉(zhuǎn)btn2.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {// 2\. 跳轉(zhuǎn)并攜帶參數(shù)ARouter.getInstance().build(ARouterManager.BModuleActivity).withString("name", "888").withInt("age", 11).navigation();}});
/*** 路由管理類*/public final class ARouterManager {public static final String AFragment = "/amodule/AFragment";public static final String BFragment = "/bmodule/BFragment";public static final String CFragment = "/cmodule/CFragment";public static final String AModuleActivity = "/amodule/AAModuleActivity";public static final String BModuleActivity = "/bmodule/BModuleActivity";public static final String CModuleActivity = "/cmodule/CModuleActivity";}

上述只使用了ARouter的簡(jiǎn)單用法,更多進(jìn)階用法請(qǐng)參考ARouter文檔, ARouter

5、Application

當(dāng)組件單獨(dú)運(yùn)行的時(shí)候,每個(gè)Module自成一個(gè)APK,那么就意味著會(huì)有多個(gè)Application,很顯然我們不愿意重復(fù)寫這么多代碼,所以我們只需要定義一個(gè)BaseApplication即可,其它的Application直接繼承此BaseApplication就OK了,BaseApplication里面還可定義公用的參數(shù)。

更多Android進(jìn)階指南 可以掃碼 解鎖 《Android十大板塊文檔》

1.Android車載應(yīng)用開發(fā)系統(tǒng)學(xué)習(xí)指南(附項(xiàng)目實(shí)戰(zhàn))

2.Android Framework學(xué)習(xí)指南,助力成為系統(tǒng)級(jí)開發(fā)高手

3.2023最新Android中高級(jí)面試題匯總+解析,告別零offer

4.企業(yè)級(jí)Android音視頻開發(fā)學(xué)習(xí)路線+項(xiàng)目實(shí)戰(zhàn)(附源碼)

5.Android Jetpack從入門到精通,構(gòu)建高質(zhì)量UI界面

6.Flutter技術(shù)解析與實(shí)戰(zhàn),跨平臺(tái)首要之選

7.Kotlin從入門到實(shí)戰(zhàn),全方面提升架構(gòu)基礎(chǔ)

8.高級(jí)Android插件化與組件化(含實(shí)戰(zhàn)教程和源碼)

9.Android 性能優(yōu)化實(shí)戰(zhàn)+360°全方面性能調(diào)優(yōu)

10.Android零基礎(chǔ)入門到精通,高手進(jìn)階之路

敲代碼不易,關(guān)注一下吧。?( ′・?・` ) 🤔

http://www.risenshineclean.com/news/28219.html

相關(guān)文章:

  • 微小店網(wǎng)站建設(shè)平臺(tái)網(wǎng)絡(luò)營(yíng)銷推廣方案策劃
  • 做網(wǎng)站的要花多少錢推廣普通話作文
  • 低價(jià)網(wǎng)站建設(shè)行業(yè)現(xiàn)狀win10優(yōu)化軟件哪個(gè)好
  • 徐州網(wǎng)站優(yōu)化品牌宣傳如何做
  • 建站需要哪些東西武漢網(wǎng)絡(luò)營(yíng)銷推廣
  • 住房和城鄉(xiāng)建設(shè)廳網(wǎng)站辦事大廳百度小程序?qū)W(wǎng)站seo
  • 網(wǎng)站空間購買長(zhǎng)沙關(guān)鍵詞優(yōu)化方法
  • 雄安網(wǎng)站建設(shè)公司百度純凈版首頁入口
  • 朝陽周邊網(wǎng)站建設(shè)對(duì)seo的認(rèn)識(shí)和理解
  • 怎么上傳網(wǎng)站地圖seo外包公司哪家專業(yè)
  • 自己做網(wǎng)站要會(huì)什么軟件怎么弄屬于自己的網(wǎng)站
  • 科技網(wǎng)站設(shè)計(jì)公司有哪些北京外貿(mào)網(wǎng)站優(yōu)化
  • 播視頻網(wǎng)站開發(fā)seo是什么意思中文
  • 有關(guān)網(wǎng)站開發(fā)的書籍網(wǎng)址域名大全2345網(wǎng)址
  • 個(gè)人網(wǎng)站做淘寶客如何備案搜索引擎排名原理
  • 做簡(jiǎn)歷的網(wǎng)站叫什么軟件seo免費(fèi)診斷聯(lián)系方式
  • 網(wǎng)站一般怎么推廣百度互聯(lián)網(wǎng)營(yíng)銷是什么
  • 鹽城網(wǎng)站建設(shè)報(bào)價(jià)廣州市疫情最新
  • 代刷網(wǎng)站app制作教程百度搜索資源
  • 杭州臨平網(wǎng)站建設(shè)廣州排名推廣
  • 北侖網(wǎng)站建設(shè)怎么樣做推廣最有效
  • 服務(wù)器網(wǎng)站慢的原因seo排名優(yōu)化軟件價(jià)格
  • wordpress自動(dòng)登錄ftp家庭優(yōu)化大師免費(fèi)下載
  • Asp.net 手機(jī)網(wǎng)站制作優(yōu)化快速排序
  • 手機(jī)版網(wǎng)站制作應(yīng)用淘寶如何刷關(guān)鍵詞增加權(quán)重
  • 深深圳市建設(shè)局網(wǎng)站百度競(jìng)價(jià)培訓(xùn)
  • 投資手機(jī)網(wǎng)站源碼廣告聯(lián)盟平臺(tái)排名
  • 順德企業(yè)手機(jī)網(wǎng)站建設(shè)怎么讓百度搜出自己
  • wordpress首頁不加載圖片小紅書seo排名優(yōu)化
  • 重點(diǎn)建設(shè)政協(xié)網(wǎng)站百度推廣公司