MVPArms MVP快速集成框架

时间:2023-03-09 17:08:37
MVPArms MVP快速集成框架

前言

  • 今年的Android技术圈中MVP,Dagger2,Rxjava,Retrofit这些词汇非常火,随便打开一个技术论坛都充斥着大量的关于这些技术的文章,Github也充斥着各种以基于MVP+Retrofit+RxJava+Dagger2+MaterialDesign开发的xxxx为标题的开源项目或Demo.

  • 但是大家这么热心的开源此类项目,一直重复的做着同样的事教授大家使用的方式和技巧有没有想过依赖一个第三方库,就可以快速的搭建此类框架?

What is MVPArms?

  • MVPArms是一个集成了大量Android主流框架,并且全部使用Dagger2管理,以及提供API将所有库连接起来方便使用,还提供详细的Wiki文档.

  • 它可以使开发后面的所有项目都不用重复的复制粘贴(用过此类框架的朋友应该知道,这些库都依赖其它的库,就算一个build.gradle都会浪费很多时间),一个依赖省去很多烦恼,而且对于新手来说这些框架难的不仅仅是API的使用,更难的是怎么把它们结合到一起,应对各种场景的使用.

  • 对于一个新的Android项目,特别是熟练使用Dagger2Rxjava的开发者,你们只需要将此项目Clone下来,Demo只实现了一个页面,将此页面删除掉,添加所需要的RetrofitAPI,你的框架就搭建好了,你就可以直接使用Demo进行后续的开发,包结构也适合后面的扩展.

Feature

  • 支持大型项目的开发方便扩展,Demo的包结构直接可以拿来用
  • 全部使用Dagger2管理
  • 大量使用Rxjava
  • 提供Mvp基类,快速接入
  • 全部UI自适应
  • 图片加载类ImageLoader使用策略模式和建造者模式,轻松切换图片加载框架和扩展
  • Model层提供Retrofit API和缓存,是否使用缓存自行选择
  • 全局http Request(Params,headersResponse(Params,耗时)信息监听,可解析json后根据状态码做相应操作
  • 全局Rxjava错误处理,错误后自动重试

Where?

MVPArms欢迎StarFork

Structure

MVPArms MVP快速集成框架

How?

Wiki

详细用法请参照Wiki,下面只是简单的介绍下MVP

Contract

根据Google官方的MVP项目,可以在Contract中定义MVP的接口,便于管理,此框架使用Dagger注入Presenter无需定义Presenter接口,所以Contract只定义ModelView的接口

 public interface UserContract {
//对于经常使用的关于UI的方法可以定义到BaseView中,如显示隐藏进度条,和显示文字消息
interface View extends BaseView {
void setAdapter(DefaultAdapter adapter);
void startLoadMore();
void endLoadMore();
}
//Model层定义接口,外部只需关心model返回的数据,无需关心内部细节,及是否使用缓存
interface Model {
Observable<List<User>> getUsers(int lastIdQueried, boolean update);
}
}

View

一般让ActivityFragment实现Contract中定义的View接口,供Presenter调用对应方法操作UI,BaseActivity默认注入Presenter,如想使用Presenter,必须指定Presenter的范型,和实现setupActivityComponent来提供Presenter需要的ComponentModule

 public class UserActivity extends WEActivity<UserPresenter> implements UserContract.View {

     @Override
protected void setupActivityComponent(AppComponent appComponent) {
DaggerUserComponent
.builder()
.appComponent(appComponent)
.userModule(new UserModule(this))
.build()
.inject(this); } @Override
protected View initView() {
return LayoutInflater.from(this).inflate(R.layout.activity_user, null, false);
} @Override
protected void initData() {
}
}

Model

Model实现ContractModel接口,并且继承BaseModel,指定范型为ServiceManagerCacheManager,然后通过两个Manager拿到需要的ServiceCachePresenter提供需要的数据(是否使用缓存请自行选择,Presenter无需关心细节)

 public class UserModel extends BaseModel<ServiceManager,CacheManager> implements UserContract.Model{
private CommonService mCommonService;
private CommonCache mCommonCache; public UserModel(ServiceManager serviceManager, CacheManager cacheManager) {
super(serviceManager, cacheManager);
this.mCommonService = mServiceManager.getCommonService();
this.mCommonCache = mCacheManager.getCommonCache();
} @Override
public Observable<List<User>> getUsers(int lastIdQueried, boolean update) { } }

Presenter

PresenterMVP中的大部分的作用为通过从Model层接口获取数据,在调用View层接口显示数据,首先实现BasePresenter,指定ModelView的范型,注意一定要指定Contract中定义的接口,Presenter需要的ModelView,都使用Dagger2注入,这样即解藕又方便测试,怎么注入?

 @ActivityScope
public class UserPresenter extends BasePresenter<UserContract.Model, UserContract.View> { @Inject
public UserPresenter(UserContract.Model model, UserContract.View rootView) {
super(model, rootView);
}
//这里定义业务方法,相应用户的交互
public void requestUsers(final boolean pullToRefresh) {

}

Acknowledgement

感谢本框架所使用到的所有三方库的Author,以及所有为Open Sourece做无私贡献的DeveloperOrganizations,使我们能更好的工作和学习,本人也会将业余时间回报给开源社区

  1. MvpGoogle官方出品的Mvp架构项目,含有多个不同的架构分支(此为Dagger分支).
  2. Dagger2Google根据Square的Dagger1出品的依赖注入框架,通过apt动态生成代码,性能优于用反射技术依赖注入的框架.
  3. Rxjava提供优雅的响应式Api解决异步请求.
  4. RxAndroid为Android提供响应式Api.
  5. Rxlifecycle在Android上使用rxjava都知道的一个坑,就是生命周期的解除订阅,这个框架通过绑定activity和fragment的生命周期完美解决.
  6. RxbindingJakeWharton大神的View绑定框架,优雅的处理View的响应事件.
  7. RxCache是使用注解为Retrofit加入二级缓存(内存,磁盘)的缓存库
  8. RetrofitSquare出品的网络请求库,极大的减少了http请求的代码和步骤.
  9. Okhttp同样Square出品,不多介绍,做Android都应该知道.
  10. Autolayout鸿洋大神的Android全尺寸适配框架.
  11. GsonGoogle官方的Json Convert框架.
  12. ButterknifeJakeWharton大神出品的view注入框架.
  13. Androideventbus一个轻量级使用注解的Eventbus.
  14. TimberJakeWharton大神出品Log框架,内部代码极少,但是思想非常不错.
  15. Glide此库为本框架默认封装图片加载库,可参照着例子更改为其他的库,Api和Picasso差不多,缓存机制比Picasso复杂,速度快,适合处理大型图片流,支持gfit,Fresco太大了!,在5.0一下优势很大,5.0以上系统默认使用的内存管理和Fresco类似.
  16. Realm速度和跨平台性使它成为如今最火的数据库,美中不足的就是so库太大
  17. LeakCanarySquare出品的专门用来检测AndroidJava的内存泄漏,通过通知栏提示内存泄漏信息
  18. RxErroHandlerRxjava错误处理库,可出现错误后重试

《C#开发教程、PHP开发教程、数据库开发教程》