框架地址:https://github.com/geduo83/FlyTour
FlyTour是Android組件化+MVVM+MVP+RxJava+Retrofit+Dagger2組成的雙架構(gòu)框架藤乙,工程架構(gòu)采用gradle配置實(shí)現(xiàn)組件化燎窘,模塊的架構(gòu)采用典型的MVVM+MVP架構(gòu)各拷,MVVM和MVP根據(jù)自己的項(xiàng)目實(shí)際需求去決定使用,該框架是Android組件化、Android MVVM架構(gòu)碘菜、Android MVP架構(gòu)的集大成者,幫助你快速的搭建自己的App項(xiàng)目開(kāi)發(fā)框架,以便把主要的精力放在自己的項(xiàng)目的業(yè)務(wù)功能實(shí)現(xiàn)上室囊,另外在長(zhǎng)期的工作實(shí)踐中總結(jié)整理大量的實(shí)用工具類在項(xiàng)目lib_common組件的util包當(dāng)中方便大家調(diào)用。
本框架的最大的特點(diǎn)就是和FlyCloud微服務(wù)框架配合使用魁索,從移動(dòng)前端和服務(wù)后端的一套完整解決方案融撞,解決了很多開(kāi)發(fā)者只會(huì)前端不會(huì)后端的問(wèn)題,或者只會(huì)后端不會(huì)前端的問(wèn)題粗蔚,有了這兩套框架尝偎,我們的開(kāi)發(fā)不在受制于人。
通過(guò)不斷的升級(jí)迭代鹏控,該框架已經(jīng)有了七個(gè)不同的版本致扯,4.1.0【組件化+MVVM+RxJava+Retrofit+DataBinding升級(jí)版】、4.0.0【組件化+MVVM+RxJava+Retrofit標(biāo)準(zhǔn)版】当辐、3.0.0【組件化+MVP+RxJava+Retrofit+Dagger2網(wǎng)絡(luò)版】急前、2.1.0【組件化+MVP+Dagger2版】、2.0.0【組件化+MVP標(biāo)準(zhǔn)版】瀑构, 1.1.0【優(yōu)化版】裆针、1.0.0【初始版】,各個(gè)版本都有不同的特性寺晌,基本涵蓋了目前Android領(lǐng)域的主流開(kāi)發(fā)架構(gòu)世吨,能滿足不同階段的Android開(kāi)發(fā)者的使用需求,大家可根據(jù)自己的項(xiàng)目需求去選擇自己所需要的版本呻征。
FlyTour為組件化項(xiàng)目架構(gòu)耘婚,它由自己的開(kāi)源框架FlyTranslate,FlyAndroidMVP基礎(chǔ)上孵化出來(lái)的框架陆赋,如果需要單一結(jié)構(gòu)體項(xiàng)目架構(gòu)請(qǐng)下載FlyTranslate【MVP+RxJava+Retrofit+Dagger2】或FlyAndroidMVP【android mvp】
更新日志:
FlyTour 4.1.0【組件化+MVVM+RxJava+Retrofit+DataBinding升級(jí)版】 2019-07-07
組件化+MVVM+DataDinding+RxJava+Retrofit沐祷,在4.0.0的MVVM架構(gòu)基礎(chǔ)之上增加了DataBinding的特性嚷闭,配合FlyCloud微服務(wù)系統(tǒng)共同使用
- 增加了DataBinding的特性
FlyTour 4.0.0【組件化+MVVM+RxJava+Retrofit標(biāo)準(zhǔn)版】 2019-07-03
組件化+MVVM+RxJava+Retrofit,基本架構(gòu)由3.0.0的MVP架構(gòu)升級(jí)為MVVM架構(gòu)赖临,配合FlyCloud微服務(wù)系統(tǒng)共同使用
- MVVM架構(gòu)徹底改版
FlyTour 3.0.0【組件化+MVP+RxJava+Retrofit+Dagger2網(wǎng)絡(luò)版】 2019-06-26
組件化+MVP+RxJava+Retrofit+Dagger2,該版本是在2.1.0的版本的基礎(chǔ)之上對(duì)Model層的數(shù)據(jù)源做了升級(jí)胞锰,由本地?cái)?shù)據(jù)源升級(jí)為網(wǎng)絡(luò)數(shù)據(jù)源,配合FlyCloud微服務(wù)系統(tǒng)共同使用
- 網(wǎng)絡(luò)請(qǐng)求部分由Retrofit+RxJava完成
FlyTour 2.1.0【組件化+MVP+Dagger2版】 2019-06-06
組件化+MVP+Dagger2兢榨,該版本在2.0.0的基礎(chǔ)上添加了Dagger2的特性嗅榕,Present、Model的創(chuàng)建都由Dagger2自動(dòng)完成
- 1.Presenter實(shí)例的創(chuàng)建由Dagger2完成
- 2.Modle實(shí)例的創(chuàng)建有Dagger2完成
- 3.DAO實(shí)例的創(chuàng)建由Dagger2完成
FlyTour 2.0.0【組件化+MVP標(biāo)準(zhǔn)版】 2019-05-30
基本架構(gòu)為組件化+MVP吵聪,數(shù)據(jù)由本地SQLLite數(shù)據(jù)庫(kù)提供
以新聞資訊為功能凌那,對(duì)app的界面進(jìn)行了全新的改版,由新聞列表展示吟逝、新聞詳情展示帽蝶、新聞添加、新聞?lì)愋吞砑涌樵堋h除這幾個(gè)簡(jiǎn)單的功能組成励稳,基本上覆蓋了整個(gè)框架的所有核心的、常用的一些功能
- 新聞?lì)愋吞砑泳质础h除、展示
- 新聞添加恕稠、展示
- 支持是否啟用ToolBar
- 支持自定義ToolBar
- 支持loading加載數(shù)據(jù)
- 支持透明loading的加載數(shù)據(jù)
- 支持顯示無(wú)數(shù)據(jù)
- 支持網(wǎng)絡(luò)網(wǎng)絡(luò)錯(cuò)誤顯示
- 支持Fragment的懶加載
- 支持最基本的下拉刷新琅绅、上拉加載更多
- 支持自定義HeadView和FootView
- 支持自動(dòng)刷新
- 支持啟用、禁用下拉刷新
- 支持啟用鹅巍、進(jìn)攻上拉加載更多
- 通用小菊花樣式DaisyRefreshLayout
- 通用小箭頭樣式ArrowRefreshLayout
FlyTour 1.1.0【優(yōu)化版】 2019-03-34
- MVP功能的一些優(yōu)化
FlyTour 1.0.0【初始版】 2019-01-26
- 初始版本千扶,以車輛運(yùn)動(dòng)軌跡大數(shù)據(jù)采集為功能簡(jiǎn)單的實(shí)現(xiàn)了組件化和MVP的基本功能
功能演示
-
啟動(dòng)頁(yè)
啟動(dòng)頁(yè) -
新聞下來(lái)刷新、無(wú)數(shù)據(jù)骆捧、無(wú)網(wǎng)絡(luò)澎羞、新聞詳情展示
新聞列表、新聞詳情
無(wú)網(wǎng)絡(luò) -
新聞?lì)愋吞砑恿参⑿侣勌砑?/p>
新聞?lì)愋吞砑?/div>
新聞詳情添加主要功能
核心公共組件lib_common
MVVM七大的核心公用基類
- View層核接口IBaseView
interface IBaseView{ void initView(); void initListener(); void initData(); void finishActivity(); void showInitLoadView(boolean show); void showNoDataView(boolean show); void showTransLoadingView(boolean show); void showNetWorkErrView(boolean show); Context getContext(); }
- BaseActivity
abstract class BaseActivity implements IBaseView{ public abstract int onBindLayout(); public abstract void initView(); public abstract void initData(); public void initListener(); }
- BaseMvvmActivity
abstract class BaseMvvmActivity extends BaseActivity{ initViewDataBinding(); initBaseViewObservable(); initViewObservable(); }
- BaseMvvmRefreshActivity
abstract class BaseMvvmRefreshActivity extends BaseMvvmActivity{ private void initBaseViewRefreshObservable(); public abstract DaisyRefreshLayout getRefreshLayout(); public void initRefreshView(); public void stopRefresh(); public void stopLoadMore(); public void autoLoadData(); }
- BaseFragment
class BaseFragment implements IBaseView{ initCommonView(mView); initView(mView); initListener(); }
- BaseMvvmFragment
class BaseMvvmFragment extends BaseFragment{ initViewModel(); initBaseViewObservable(); initViewObservable(); }
- BaseMvvmRefreshFragment
class BaseMvvmRefreshFragment extends BaseMvvmFragment{ private void initBaseViewRefreshObservable(); public abstract DaisyRefreshLayout getRefreshLayout(); public void initRefreshView(); public void stopRefresh(); public void stopLoadMore(); public void autoLoadData() ; }
MVP七大的核心公用基類
- BaseActivity
public abstract class BaseActivity extends RxAppCompatActivity implements BaseView { ... }
- BaseMvpActivity
public abstract class BaseMvpActivity<M extends BaseModel,V,P extends BasePresenter<M,V>> extends BaseActivity { ... }
- BaseRefreshActivity
public abstract class BaseRefreshActivity<M extends BaseModel, V extends BaseRefreshView<T>, P extends BaseRefreshPresenter<M, V, T>, T> extends BaseMvpActivity<M, V, P> implements BaseRefreshView<T> { }
- BaseFragment
- BaseMvpFragment
- BaseRefreshFragment
- BaseAdapter
功能特色:
- 支持是否使用ToolBar
public boolean enableToolbar() { return true; }
- 支持自定義ToolBar
public int onBindToolbarLayout() { return R.layout.common_toolbar; }
- 支持loading加載數(shù)據(jù)
public void showInitLoadView() { showInitLoadView(true); } public void hideInitLoadView() { showInitLoadView(false); }
- 支持透明loading的加載數(shù)據(jù)
@Override public void showTransLoadingView() { showTransLoadingView(true); } @Override public void hideTransLoadingView() { showTransLoadingView(false); }
- 支持顯示無(wú)數(shù)據(jù)
public void showNoDataView() { showNoDataView(true); } public void showNoDataView(int resid) { showNoDataView(true, resid); } public void hideNoDataView() { showNoDataView(false); }
- 支持網(wǎng)絡(luò)網(wǎng)絡(luò)錯(cuò)誤顯示
public void hideNetWorkErrView() { showNetWorkErrView(false); } public void showNetWorkErrView() { showNetWorkErrView(true); }
- 支持Fragment的懶加載
private void lazyLoad() { //這里進(jìn)行雙重標(biāo)記判斷,必須確保onCreateView加載完畢且頁(yè)面可見(jiàn),才加載數(shù)據(jù) if (isViewCreated && isViewVisable) { initData(); //數(shù)據(jù)加載完畢,恢復(fù)標(biāo)記,防止重復(fù)加載 isViewCreated = false; isViewVisable = false; } } //默認(rèn)不啟用懶加載 public boolean enableLazyData() { return false; }
上拉下拉功能組件 lib_refresh_layout
- 支持最基本的下拉刷新妆绞、上拉加載更多
- 支持自定義HeadView和FootView
- 支持自動(dòng)刷新
- 支持啟用、禁用下拉刷新
- 支持啟用枫攀、進(jìn)攻上拉加載更多
- 通用小菊花樣式DaisyRefreshLayout
- 通用小箭頭樣式ArrowRefreshLayout
項(xiàng)目架構(gòu)
在這里插入圖片描述- 集成模式:所有的業(yè)務(wù)組件被“app殼工程”依賴括饶,組成一個(gè)完整的APP;
- 組件模式:可以獨(dú)立開(kāi)發(fā)業(yè)務(wù)組件来涨,每一個(gè)業(yè)務(wù)組件就是一個(gè)APP图焰;
- app殼工程:負(fù)責(zé)管理各個(gè)業(yè)務(wù)組件,和打包apk蹦掐,沒(méi)有具體的業(yè)務(wù)功能技羔;
- 業(yè)務(wù)組件:根據(jù)公司具體業(yè)務(wù)而獨(dú)立形成一個(gè)的工程僵闯;
- 功能組件:提供開(kāi)發(fā)APP的某些基礎(chǔ)功能,例如打印日志藤滥、下拉刷新控件等鳖粟;
- Main組件:屬于業(yè)務(wù)組件,指定APP啟動(dòng)頁(yè)面超陆、主界面牺弹;
- Common組件:屬于功能組件,支撐業(yè)務(wù)組件的基礎(chǔ)时呀,提供多數(shù)業(yè)務(wù)組件需要的功能
MVVM架構(gòu)
在這里插入圖片描述-
View層類關(guān)系圖
在這里插入圖片描述 -
ViewModel層類關(guān)系圖
在這里插入圖片描述 -
model層類關(guān)系圖
在這里插入圖片描述
MVP架構(gòu)
這是整個(gè)項(xiàng)目的mvp結(jié)構(gòu)圖:
在這里插入圖片描述- Activity關(guān)系圖:
在這里插入圖片描述
Fragment的類關(guān)系圖
Fragment的類關(guān)系圖和Activity類似具體詳見(jiàn)common組件下的base包和mvp包
組件化實(shí)現(xiàn):
FlyTour新聞客戶端使用阿里ARouter作為路由张漂,實(shí)現(xiàn)組件與組件的通信跳轉(zhuǎn)
集成模式和組件模式轉(zhuǎn)換
Module的屬性是在每個(gè)組件的 build.gradle 文件中配置的,當(dāng)我們?cè)诮M件模式開(kāi)發(fā)時(shí)谨娜,業(yè)務(wù)組件應(yīng)處于application屬性航攒,這時(shí)的業(yè)務(wù)組件就是一個(gè) Android App,可以獨(dú)立開(kāi)發(fā)和調(diào)試趴梢;而當(dāng)我們轉(zhuǎn)換到集成模式開(kāi)發(fā)時(shí)漠畜,業(yè)務(wù)組件應(yīng)該處于 library 屬性,這樣才能被我們的“app殼工程”所依賴坞靶,組成一個(gè)具有完整功能的APP
先打開(kāi)FlyTour工程的根目錄下找到gradle.properties 文件憔狞,然后將 isModule 改為你需要的開(kāi)發(fā)模式(true/false), 然后點(diǎn)擊 "Sync Project" 按鈕同步項(xiàng)目
isModule=false
在這里插入圖片描述if (isModule.toBoolean()) { apply plugin: 'com.android.application' } else { apply plugin: 'com.android.library' }
在這里插入圖片描述組件之間AndroidManifest合并問(wèn)題
我們可以為組件開(kāi)發(fā)模式下的業(yè)務(wù)組件再創(chuàng)建一個(gè) AndroidManifest.xml彰阴,然后根據(jù)isModule指定AndroidManifest.xml的文件路徑瘾敢,讓業(yè)務(wù)組件在集成模式和組件模式下使用不同的AndroidManifest.xml,這樣表單沖突的問(wèn)題就可以規(guī)避了
已module_main組件為例配置如下:
在這里插入圖片描述sourceSets { main { if (isModule.toBoolean()) { manifest.srcFile 'src/main/module/AndroidManifest.xml' } else { manifest.srcFile 'src/main/AndroidManifest.xml' } } }
組件模式下的Application
在每個(gè)組件的debug目錄下創(chuàng)建一個(gè)Application并在module下的AndroidManifest.xml進(jìn)行配置
配圖:
在這里插入圖片描述集成開(kāi)發(fā)模式下的Application
在這里插入圖片描述最后編輯于 :?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者- 文/潘曉璐 我一進(jìn)店門(mén)罗洗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)嘉裤,“玉大人,你說(shuō)我怎么就攤上這事栖博⌒汲瑁” “怎么了?”我有些...
- 文/不壞的土叔 我叫張陵仇让,是天一觀的道長(zhǎng)典奉。 經(jīng)常有香客問(wèn)我躺翻,道長(zhǎng),這世上最難降的妖魔是什么卫玖? 我笑而不...
- 正文 為了忘掉前任公你,我火速辦了婚禮,結(jié)果婚禮上假瞬,老公的妹妹穿的比我還像新娘陕靠。我一直安慰自己,他們只是感情好脱茉,可當(dāng)我...
- 文/花漫 我一把揭開(kāi)白布剪芥。 她就那樣靜靜地躺著,像睡著了一般琴许。 火紅的嫁衣襯著肌膚如雪税肪。 梳的紋絲不亂的頭發(fā)上,一...
- 那天榜田,我揣著相機(jī)與錄音益兄,去河邊找鬼。 笑死箭券,一個(gè)胖子當(dāng)著我的面吹牛净捅,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播辩块,決...
- 文/蒼蘭香墨 我猛地睜開(kāi)眼蛔六,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了庆捺?” 一聲冷哼從身側(cè)響起古今,我...
- 序言:老撾萬(wàn)榮一對(duì)情侶失蹤屁魏,失蹤者是張志新(化名)和其女友劉穎滔以,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體氓拼,經(jīng)...
- 正文 獨(dú)居荒郊野嶺守林人離奇死亡你画,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
- 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了桃漾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坏匪。...
- 正文 年R本政府宣布凭迹,位于F島的核電站罚屋,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嗅绸。R本人自食惡果不足惜脾猛,卻給世界環(huán)境...
- 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鱼鸠。 院中可真熱鬧猛拴,春花似錦、人聲如沸蚀狰。這莊子的主人今日做“春日...
- 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)造锅。三九已至撼唾,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間哥蔚,已是汗流浹背倒谷。 一陣腳步聲響...
- 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像深夯,于是被迫代替她去往敵國(guó)和親抖格。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
推薦閱讀更多精彩內(nèi)容
- 近兩年安卓開(kāi)發(fā)社區(qū)提倡使用MVP或MVVM替代MVC咕晋,近期谷歌官方還在Github上公布了示例代碼供大家參考雹拄。另外...
- MVC质蕉、MVP和MVVM是常見(jiàn)的三種架構(gòu)設(shè)計(jì)模式势篡,當(dāng)前MVP和MVVM的使用相對(duì)比較廣泛,當(dāng)然MVC也并沒(méi)有過(guò)時(shí)之...
- 本文導(dǎo)語(yǔ): 如果對(duì)Rxjava+Retrofit聯(lián)網(wǎng)不熟悉的朋友模暗,可以參考下我之前寫(xiě)的幾篇文章禁悠,有比較詳細(xì)的講解。...
- 真的不是很喜歡逛西湖兑宇,親戚邀陪碍侦,我還是熱情地做了一回導(dǎo)游。我曾發(fā)牢騷不想再逛西湖,其實(shí)到了西湖邊瓷产,看到秀麗的風(fēng)...
- 克里斯波什13年的職業(yè)生涯即將畫(huà)上句號(hào)比规,熱火隊(duì)之前官方宣布,將于3月27日在與魔術(shù)隊(duì)的比賽中為波什舉行球衣退役儀式...