Skip to content
LinXiao edited this page Jul 23, 2017 · 4 revisions

在README里面已经说过,这个框架的目的就是为了提供一个framework module,为项目开发提供一个基础的框架,同时作为一个代码库,免去大部分在开发项目中的重复劳动。
项目有三个分支

  • retrofit-base: 此分支没有使用RxJava作为分层架构间的数据连接,而是使用应用内自己实现的ActionListener作为UI请求数据层的数据回调,适合初学Android开发、没有RxJava使用经验的同学拿来使用,因为基础框架非常简单,目前已经基本停止更新框架相关内容,主要更新代码库和工具类,在其他分支有新的工具类或者bug修复时将会更新此分支
  • retrofit-rx: 与retrofit-base分支的区别在于使用RxJava管理App内的网络调用,集成了rx-lifecycle对RxJava调用的生命周期进行管理。整体架构与retrofit-base基本一致,适合中小型项目快速开发使用
  • mvvm-rx: 在retrofit-rx的基础上,以Google的android-architecture-components组件实现了MVVM框架,数据绑定由RxJava实现,适合较大型项目和长期维护的项目使用

注:

  • 上述分支集成的均为RxJava2,如需使用RxJava1请自行修改
  • 关于分层框架的思路,请参考 分层框架

项目集成

1. 模块导入

作为一个App的骨架,请以导入module的方式集成,将所需分支的Project下载下来后可以看到app和framework两个module app为framework module中所提供的接口以及基类框架的实现范例,可以作为参考代码使用。 将framework module 导入你的项目,并在app的build.gradle中添加

compile project(':framework')

即可完成框架模块引入

2. 继承基类

要想使用QuickDevFramework提供的大部分功能,必须继承以下基类

  1. Application类继承QDFApplication,即可使用框架Application类中所提供的全部功能。
  2. app中的Activity继承BaseActivity,注意BaseActivity中实现了对PermissionManager的回调处理,如果子类Activity不继承BaseActivity则有可能无法正确收到权限申请回调。
  3. Fragment继承BaseFragment。
  4. 如果你使用DialogFragment来管理你APP内的dialog,可以让DialogFragment继承BaseDialogFragment。
  5. 如果你的项目中有底部弹出Dialog的需求,可以考虑将此类继承BaseBottomDialogFragment,直接实现底部弹出Dialog效果,如果不使用DialogFragment,框架也提供了BottomDialog供业务模块使用
  6. 数据管理的DataManager继承BaseDataManger,可以在BaseDataManager中实现通用功能

上述3、4、5的继承主要是为了在框架模块中提供一个基本的业务无关的组件基类,以此向子类提供共有的功能,可以继承也可以不继承,如果这些基类并不符合你的业务功能,请在framework模块中任意删改

3. 继承Style

出于简化开发的目的,我在framework模块的style.xml中添加了基础style并缓存了开发中常见的style配置,如果你需要使用这些配置,请在app的AndroidManifest.xml中直接使用。但是考虑到不同App module可能有不同的配置,推荐的集成方式还是在app的style.xml中配置基础style,继承framework中的style。
当然了,这个只属于简化开发的代码,集成与否对其它代码没有任何影响

4. app module框架搭建

在完成上述集成后,一个app的业务模块应该已经基本成型了,还剩下的一些搭建工作

  • 网络模块:应用内应该有网络管理类,在此类中使用RetrofitApiBuilder配置Retrofit即可,数据转换等工作
  • 其它框架接入:QuickDevFramework只提供了最基本的数据管理和网络调用框架,以及某些常用代码所必须集成的第三方库,诸如图片管理、数据库ORM、注解以及其它第三方库,请根据需求选择集成到业务 module中还是framework module

完成以上工作后一个app的框架搭建就基本完成

Clone this wiki locally