Android组件化+MVVM+MVP+RxJava+Retrofit+Dagger2双架构框架FlyTour+FlyCloud微服务框架新闻客户端升级版使用详解

框架地址:https://github.com/geduo83/FlyTour

FlyTour是Android组件化+MVVM+MVP+RxJava+Retrofit+Dagger2组成的双架构框架,工程架构采用gradle配置实现组件化,模块的架构采用典型的MVVM+MVP架构,MVVM和MVP根据自己的项目实际需求去决定使用,该框架是Android组件化、Android MVVM架构、Android MVP架构的集大成者,帮助你快速的搭建自己的App项目开发框架,以便把主要的精力放在自己的项目的业务功能实现上,另外在长期的工作实践中总结整理大量的实用工具类在项目lib_common组件的util包当中方便大家调用。

本框架的最大的特点就是和FlyCloud微服务框架配合使用,从移动前端和服务后端的一套完整解决方案,解决了很多开发者只会前端不会后端的问题,或者只会后端不会前端的问题,有了这两套框架,我们的开发不在受制于人。

通过不断的升级迭代,该框架已经有了七个不同的版本,4.1.0【组件化+MVVM+RxJava+Retrofit+DataBinding升级版】4.0.0【组件化+MVVM+RxJava+Retrofit标准版】3.0.0【组件化+MVP+RxJava+Retrofit+Dagger2网络版】2.1.0【组件化+MVP+Dagger2版】2.0.0【组件化+MVP标准版】1.1.0【优化版】1.0.0【初始版】,各个版本都有不同的特性,基本涵盖了目前Android领域的主流开发架构,能满足不同阶段的Android开发者的使用需求,大家可根据自己的项目需求去选择自己所需要的版本。

FlyTour为组件化项目架构,它由自己的开源框架FlyTranslateFlyAndroidMVP基础上孵化出来的框架,如果需要单一结构体项目架构请下载FlyTranslate【MVP+RxJava+Retrofit+Dagger2】FlyAndroidMVP【android mvp】

更新日志:

FlyTour 4.1.0【组件化+MVVM+RxJava+Retrofit+DataBinding升级版】 2019-07-07

组件化+MVVM+DataDinding+RxJava+Retrofit,在4.0.0的MVVM架构基础之上增加了DataBinding的特性,配合FlyCloud微服务系统共同使用

  • 增加了DataBinding的特性

FlyTour 4.0.0【组件化+MVVM+RxJava+Retrofit标准版】 2019-07-03

组件化+MVVM+RxJava+Retrofit,基本架构由3.0.0的MVP架构升级为MVVM架构,配合FlyCloud微服务系统共同使用

  • MVVM架构彻底改版

FlyTour 3.0.0【组件化+MVP+RxJava+Retrofit+Dagger2网络版】 2019-06-26

组件化+MVP+RxJava+Retrofit+Dagger2,该版本是在2.1.0的版本的基础之上对Model层的数据源做了升级,由本地数据源升级为网络数据源,配合FlyCloud微服务系统共同使用

  • 网络请求部分由Retrofit+RxJava完成

FlyTour 2.1.0【组件化+MVP+Dagger2版】 2019-06-06

组件化+MVP+Dagger2,该版本在2.0.0的基础上添加了Dagger2的特性,Present、Model的创建都由Dagger2自动完成

  • 1.Presenter实例的创建由Dagger2完成
  • 2.Modle实例的创建有Dagger2完成
  • 3.DAO实例的创建由Dagger2完成

FlyTour 2.0.0【组件化+MVP标准版】 2019-05-30

基本架构为组件化+MVP,数据由本地SQLLite数据库提供
以新闻资讯为功能,对app的界面进行了全新的改版,由新闻列表展示、新闻详情展示、新闻添加、新闻类型添加、删除这几个简单的功能组成,基本上覆盖了整个框架的所有核心的、常用的一些功能

  • 新闻类型添加、删除、展示
  • 新闻添加、展示
  • 支持是否启用ToolBar
  • 支持自定义ToolBar
  • 支持loading加载数据
  • 支持透明loading的加载数据
  • 支持显示无数据
  • 支持网络网络错误显示
  • 支持Fragment的懒加载
  • 支持最基本的下拉刷新、上拉加载更多
  • 支持自定义HeadView和FootView
  • 支持自动刷新
  • 支持启用、禁用下拉刷新
  • 支持启用、进攻上拉加载更多
  • 通用小菊花样式DaisyRefreshLayout
  • 通用小箭头样式ArrowRefreshLayout

FlyTour 1.1.0【优化版】 2019-03-34

  • MVP功能的一些优化

FlyTour 1.0.0【初始版】 2019-01-26

  • 初始版本,以车辆运动轨迹大数据采集为功能简单的实现了组件化和MVP的基本功能

功能演示

  • 启动页


    启动页
  • 新闻下来刷新、无数据、无网络、新闻详情展示


    新闻列表、新闻详情

    无网络
  • 新闻类型添加、新闻添加


    新闻类型添加

    新闻详情添加

主要功能

核心公共组件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加载数据
  public void showInitLoadView() {
        showInitLoadView(true);
    }

    public void hideInitLoadView() {
        showInitLoadView(false);
    }
  • 支持透明loading的加载数据
  @Override
    public void showTransLoadingView() {
        showTransLoadingView(true);
    }

    @Override
    public void hideTransLoadingView() {
        showTransLoadingView(false);
    }
  • 支持显示无数据
    public void showNoDataView() {
        showNoDataView(true);
    }

    public void showNoDataView(int resid) {
        showNoDataView(true, resid);
    }

    public void hideNoDataView() {
        showNoDataView(false);
    }
  • 支持网络网络错误显示
public void hideNetWorkErrView() {
        showNetWorkErrView(false);
    }

    public void showNetWorkErrView() {
        showNetWorkErrView(true);
    }

  • 支持Fragment的懒加载
  private void lazyLoad() {
        //这里进行双重标记判断,必须确保onCreateView加载完毕且页面可见,才加载数据
         if (isViewCreated && isViewVisable) {
            initData();
            //数据加载完毕,恢复标记,防止重复加载
            isViewCreated = false;
            isViewVisable = false;
        }
    }
    //默认不启用懒加载
    public boolean enableLazyData() {
        return false;
    }

上拉下拉功能组件 lib_refresh_layout

  • 支持最基本的下拉刷新、上拉加载更多
  • 支持自定义HeadView和FootView
  • 支持自动刷新
  • 支持启用、禁用下拉刷新
  • 支持启用、进攻上拉加载更多
  • 通用小菊花样式DaisyRefreshLayout
  • 通用小箭头样式ArrowRefreshLayout

项目架构

在这里插入图片描述
  • 集成模式:所有的业务组件被“app壳工程”依赖,组成一个完整的APP;
  • 组件模式:可以独立开发业务组件,每一个业务组件就是一个APP;
  • app壳工程:负责管理各个业务组件,和打包apk,没有具体的业务功能;
  • 业务组件:根据公司具体业务而独立形成一个的工程;
  • 功能组件:提供开发APP的某些基础功能,例如打印日志、下拉刷新控件等;
  • Main组件:属于业务组件,指定APP启动页面、主界面;
  • Common组件:属于功能组件,支撑业务组件的基础,提供多数业务组件需要的功能

MVVM架构

在这里插入图片描述
  • View层类关系图


    在这里插入图片描述
  • ViewModel层类关系图


    在这里插入图片描述
  • model层类关系图


    在这里插入图片描述

MVP架构

这是整个项目的mvp结构图:


在这里插入图片描述
  • Activity关系图:

    在这里插入图片描述

Fragment的类关系图

Fragment的类关系图和Activity类似具体详见common组件下的base包和mvp包

组件化实现:

FlyTour新闻客户端使用阿里ARouter作为路由,实现组件与组件的通信跳转

集成模式和组件模式转换

Module的属性是在每个组件的 build.gradle 文件中配置的,当我们在组件模式开发时,业务组件应处于application属性,这时的业务组件就是一个 Android App,可以独立开发和调试;而当我们转换到集成模式开发时,业务组件应该处于 library 属性,这样才能被我们的“app壳工程”所依赖,组成一个具有完整功能的APP

先打开FlyTour工程的根目录下找到gradle.properties 文件,然后将 isModule 改为你需要的开发模式(true/false), 然后点击 "Sync Project" 按钮同步项目

isModule=false
在这里插入图片描述
if (isModule.toBoolean()) {
    apply plugin: 'com.android.application'
} else {
    apply plugin: 'com.android.library'
}
在这里插入图片描述

组件之间AndroidManifest合并问题

我们可以为组件开发模式下的业务组件再创建一个 AndroidManifest.xml,然后根据isModule指定AndroidManifest.xml的文件路径,让业务组件在集成模式和组件模式下使用不同的AndroidManifest.xml,这样表单冲突的问题就可以规避了
已module_main组件为例配置如下:


在这里插入图片描述
sourceSets {
        main {
            if (isModule.toBoolean()) {
                manifest.srcFile 'src/main/module/AndroidManifest.xml'
            } else {
                manifest.srcFile 'src/main/AndroidManifest.xml'
            }
        }
}

组件模式下的Application

在每个组件的debug目录下创建一个Application并在module下的AndroidManifest.xml进行配置
配图:


在这里插入图片描述

集成开发模式下的Application

在这里插入图片描述
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容