Android 架构设计浅谈

一世执手 提交于 2019-12-14 00:48:01

1.1基本结构

基本架构我先用现在市面普及和成熟的mvp(model-view-presenter),我的理念是职责分层,高内聚低耦合。

MVP模式的核心思想:

相对于我们大家以前熟知的mvc来说,mvp把activity中的UI逻辑抽象成View接口,吧业务逻辑抽象成presenter接口,model类还是原来的model。

1.2mvp模式的作用

1.分离了视图逻辑和业务逻辑,降低了耦合

2.ativity只处理生命周期的任务,代码变得更加简洁

3.视图逻辑个业务逻辑分别抽象到了view和presenter的接口中去,提高代码的可阅读性

4.presenter被抽象成接口,可以有多重具体的实现,所以方便进行单元测试

5.把业务逻辑抽到presneter中去,避免后台线程引用着activity导致activity的资源无法被系统

回收从而引起内存泄露和oom

1.3mvp模式的使用

  1. 创建IPresenter接口,把所有业务逻辑的接口都放在这里,并创建它的实现PresenterCompl(在这里可以方便地查看业务的功能,由于接口可以有多重实现所以也方便写单元测试)
  2. 创建IView接口,把所有视图逻辑的接口都放在这里,其实现类是当前的activity/fragment
  3. 由UML图可以看出,activity里包含了一个IPresenter,而PresenterCompl里又包含了一个IView并且依赖了Model。activity里面只保留定义IPresenter的调用,其它工作全部留到PresenterCompl中实现
  4. Model并不是必须有的,但是一定会有view和presenter

2.1引入的第三方技术

重复造轮子是不可取的,有些模块根本没有必要自己写,一下是引入的第三方库,以及说明

2.1.1网络请求库retrofit+rxjava

Retrofit:Retrofit是Square公司开发的一款针对Android 网络请求的框架(底层默认是基于OkHttp 实现)。

https://github.com/square/retrofit

RxJava :一个在 Java VM 上使用可观测的序列来组成异步的、基于事件的程序的库。RxJava使异步操作变得非常简单。

https://github.com/ReactiveX/RxJava

  • 网络请求过程中token的处理
  • 网络请求数据的加密和解密
  • 为每个请求添加固定的头部,比如说当前的版本号等
  • 规范化每个网络请求,让代码只写一次

rxjava+retrofit网络访问流程的规范化:

1.发起网络请求:

      a.添加头信息

      b.数据加密

2.收到服务器响应

   a.解析服务器返回的结果,检查状态码,做出对应处理。

   b.拦截错误:检查状态码是否为token过期

      1.如果是,那么重新获取token并重新发起请求

       2.如果不是,继续向下执行

  c.拦截错误:检查全部的错误,并通过自定义异常处理对应的错误。

可以看出来,在发出网络请求的时候的逻辑,都是由retrofit的拦截器来实现的,那么在处理请求结果的时候,都是由rxjava来实现的,所以,整个逻辑就很清晰明了了。

2.1.2图片加载框架glide

Glide,一个被google所推荐的图片加载库

https://github.com/bumptech/glide

2.1.3轮播图

Android广告图片轮播控件,支持无限循环和多种主题,可以灵活设置轮播样式、动画、轮播和切换时间、位置、图片加载框架等!

https://github.com/youth5201314/banner

2.1.4AndroidUtilsCode工具类

https://github.com/Blankj/AndroidUtilCode

2.1.5Fragmentation

为"单Activity + 多Fragment的架构","多模块Activity + 多Fragment的架构"而生,帮你简化使用过程,轻松解决各种复杂嵌套等问题,修复了官方Fragment库存在的一些BUG。

https://github.com/YoKeyword/Fragmentation

2.1.6Arouter 路由框架

  1. 一个用于Android app进行组件化改造的框架,支持模块间的路由、通信、解耦。
  2. https://github.com/alibaba/ARouter

2.2基础组件封装

2.2.1基础回调接口

  1. public interface SubscriberOnNextListener<T> {
  2. void onNext(T t);
  3. void onError(Throwable e);
  4. }

2.2.2头部导航栏封装(TopBar)

  1. <com.haolyy.haolyy.custom.TopBar
  2. android:id="@+id/topBar"
  3. android:layout_width="0dp"
  4. android:layout_marginTop="20dp"
  5. android:layout_height="wrap_content"
  6. android:paddingLeft="16dp"
  7. app:drawableLeft="@drawable/icon_back"
  8. app:drawableLeftVisibility="true"
  9. app:layout_constraintLeft_toLeftOf="parent"
  10. app:layout_constraintRight_toRightOf="parent"
  11. app:layout_constraintTop_toTopOf="parent"
  12. app:title="登录"
  13. app:titleTextColor="#4A4A4A"
  14. app:titleTextSize="16sp"
  15. app:top_background="#FFFFFF" />
  16. <View

2.2.3Adapter封装

2.2.4Base基类封装

  1. Basefragment
  2. BasePresenter
  3. BasePresenter
  4. BaseView
  5. BaseData
  6. RetrofitManage
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!