android 最新的框架搭建,Android之Mvp模式框架搭建

前言

在做Android开发时,我们通常为了更合理,更高效,优质的开发项目,并不是直接上来就开始开发功能,而是先搭建好自己的一个开发框架,一个好的开发框架,通常会让我们事倍功半,它就好比我们去建造一个房子,如果你的地基打的越深,越牢固,那么就可以建造出很高很大的房子.

在搭建一个框架前,我们先要考虑一下,这个框架要达到一个什么样的效果,主要从下面三点来进行考虑:

降低项目的复杂度

易扩展,易修改,可用性强,可维护性强

职责单一,功能清晰

Mvp模式介绍

优势

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

Activity只处理生命周期的任务,代码变得更加简洁。

视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中,提高代码的阅读性。

Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试。

把业务逻辑抽到Presenter中去,避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存

泄露和OOM。

实际应用

824e59f34c59

框架图

此图是我搭建Mvp模式的一个架构图,V层与M层分离,通过P层来建立联系,V层主要显示UI,M层进行网络请求,数据库等操作,P层作为一个中心管理器,连接M层和V层.

分包

如下图:

824e59f34c59

image.png

base 存放app的基类

common 存放一些常量,接口,公用的东西

contract 连接V层和P层的一个契约包

model M层,数据库,网络请求,服务等业务操作

presenter P层,负责连接V层和M层,中心管理器

ui V层,负责UI的展示

utils 存放工具类

widget 存放自定义的一些组件

步骤介绍

第一步 编写基类BaseActivity,BasePresenter,IBasePresenter,IBaseView

IBasePresenter代码如下:

public interface IBasePresenter {

/**

* 绑定View

* @param mView

*/

void attachView(V view);

}

IBaseView代码如下:

public interface IBaseView {

}

BasePresenter代码如下:

public abstract class BasePresenter implements IBasePresenter {

//数据管理,负责M层的业务逻辑操作

protected DataManager mDataManager;

//V层的引用

protected V mView;

/**

* 初始化DataManager

*/

public BasePresenter(){

//数据库

AppDbHelper appDbHelper = new DbHelper();

//共享参数存储

AppPreferenceHelper appPreferenceHelper = new PreferenceHelper();

//网络请求

AppApiHelper appApiHelper = new ApiHelper();

mDataManager = new DataManager(appDbHelper, appApiHelper, appPreferenceHelper);

}

/**

* 绑定view

* @param view

*/

@Override

public void attachView(V view) {

this.mView = view;

}

}

BaseActivity代码如下:

public abstract class BaseActivity

extends AppCompatActivity implements IBaseView{

//P层的应用

protected P mPresenter;

@Override

protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(getLayoutId());

//初始化mPresenter

initPresenter();

//绑定view

if(mPresenter != null){

mPresenter.attachView(this);

}

//初始化

initView();

}

/**

* 初始化mPresenter

*/

protected abstract void initPresenter();

/**

* 初始化

*/

protected abstract void initView();

/**

* 获取布局id

* @return

*/

protected abstract int getLayoutId();

}

第二步 编写测试类MainActivity(V),MainContract(契约),MainPresenter(P),DataManager(M)

MainActivity代码如下:

public class MainActivity extends BaseActivity implements MainContract.View {

@Override

protected void initPresenter() {

mPresenter = new MainPresenter();

}

@Override

protected void initView() {

mPresenter.testGetMpresenter();

mPresenter.testDb();

mPresenter.testRequestNetwork();

mPresenter.testPreference();

}

@Override

protected int getLayoutId() {

return R.layout.activity_main;

}

@Override

public void testGetMview() {

Log.d("print", "我是V层的引用");

}

}

MainPresenter代码如下:

public class MainPresenter extends BasePresenter implements MainContract.Presenter{

@Override

public void testGetMpresenter() {

Log.d("print", "我是P层的引用");

mView.testGetMview();

}

@Override

public void testDb() {

mDataManager.testDb();

}

@Override

public void testRequestNetwork() {

mDataManager.testRequestNetwork();

}

@Override

public void testPreference() {

mDataManager.testPreference();

}

}

MainContract代码如下:

public interface MainContract {

interface View extends IBaseView{

void testGetMview();

}

interface Presenter extends IBasePresenter{

void testGetMpresenter();

void testDb();

void testRequestNetwork();

void testPreference();

}

}

DataManager代码如下:

public class DataManager implements AppDbHelper,AppApiHelper,AppPreferenceHelper{

private AppDbHelper mAppDbHelper;

private AppApiHelper mAppApiHelper;

private AppPreferenceHelper mAppPreferenceHelper;

public DataManager(AppDbHelper mAppDbHelper, AppApiHelper appApiHelper, AppPreferenceHelper appPreferenceHelper) {

this.mAppDbHelper = mAppDbHelper;

this.mAppApiHelper = appApiHelper;

this.mAppPreferenceHelper = appPreferenceHelper;

}

@Override

public void testDb() {

mAppDbHelper.testDb();

}

@Override

public void testRequestNetwork() {

mAppApiHelper.testRequestNetwork();

}

@Override

public void testPreference() {

mAppPreferenceHelper.testPreference();

}

}

第三步 编写数据库,网络请求等类

AppDbHelper代码如下:

public interface AppDbHelper {

void testDb();

}

DbHelper代码如下:

public class DbHelper implements AppDbHelper{

@Override

public void testDb() {

Log.d("print", "数据库操作");

}

}

AppApiHelper代码如下:

public interface AppApiHelper {

void testRequestNetwork();

}

ApiHelper代码如下:

public class ApiHelper implements AppApiHelper{

@Override

public void testRequestNetwork() {

Log.d("print", "网络请求操作");

}

}

AppPreferenceHelper代码如下:

public interface AppPreferenceHelper {

void testPreference();

}

PreferenceHelper代码如下:

public class PreferenceHelper implements AppPreferenceHelper{

@Override

public void testPreference() {

Log.d("print", "共享参数存储操作");

}

}

运行效果图:

824e59f34c59

效果图

总结

Mvp模式在Android开发中被使用的越来越多,尤其是配合RxJava+Retrofit+Okhttp+Dagger2+Glide等第三方开源库,好处不用多说,所以大家赶紧都用起来吧,最后附上Mvp模式Demo

如果大家对我的文章感兴趣的话,请给我点个赞!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559302.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

英特尔nuc能代替主机吗_python编程,热度为什么越来越高,python能代替JAVA吗?...

大家好,我是你们的软件主讲老师宁彤天,python编程是这几年刚火起来了,这可能是这几年人工智能的普及吧,现在是人工智能非python,没有第二,当能其它语言也能实现人工智能,但python的代码量能用最…

mix2s 升级android p,小米推送小米MIX2S 安卓P稳定版更新 这两个隐藏升级你发现了吗?...

原标题:小米推送小米MIX2S 安卓P稳定版更新 这两个隐藏升级你发现了吗?今天上午,小米推送了小米MIX2S的稳定版更新,版本号为MIUI V10.0.4.0,体积为2GB,这一次更新将系统底层更新至了Android P,不…

python求出五位数的回文数_python之递归

#codingutf-8#题目:打印出如下图案(菱形)nu 1 # 开始值k 2 # 变量值while nu > 0:print(int((7 - nu) / 2) * * * nu)nu kif nu 7:k -k#题目:有一分数序列:2/1 ,3/2 ,5/3 ,8/5 ,1…

html正则判断全数字,javascript如何判断是不是数字?

javascript判断是不是数字的方法:方法一、使用js自带的全局函数isNaN()判断是不是数字。方法二、使用正则表达式判断是不是数字。方法三、通过typeof的返回值判断。JavaScript中判断是不是数字方法详解:第一种方法:isNaN()使用js自带全局函数…

law是什么的缩写_Lawyer和Attorney 有什么不同?

据美国劳工统计局(Bureau of Labor Statistics)预计,2016年至2026年间,律师的就业增长率为8.2%。在此期间,预计将新增6.5万个就业岗位。而且美国律师行业的,律师行业在US.NEWS 的Best Social Services Jobs中排名第一,…

选择座位html,影厅座位预览效果(css3)_html/css_WEB-ITnose

查看 demo 下载源码你可能对那些购买时需要选择座位的订票系统比较熟悉。通常在比赛,电影,搏击或者演唱会售票的时候需要这样做。如果能有一种座位的预览效果该有多酷啊,比如能够从你选择的位置的角度去预览舞台或者屏幕。这个问题引出了今天…

html 使用百度搜索,百度搜索uzer,进入主页

windows7的uzer.me怎么 安全上网百度搜索uzer,进入主页下载完成以后,点击,快捷方式,运行。登陆后,首先出现的是文档库,点击文档库。UZER上的软件和文件都打不开,网络没问题。因为安装的软件版本…

2021曲靖高考成绩查询时间,2021年曲靖高考成绩排名及成绩公布时间什么时候出来...

曲靖高考结束后,每年都有很多家长和考试不知道曲靖高考成绩排名如何查询、曲靖高考成绩什么时候公布以及查询方式,本文小编整理了曲靖高考成绩查询排名的相关知识。一、曲靖高考成绩公布时间及查询方式根据往年曲靖高考成绩公布时间预测,2021…

uniapp打包成html5包个ios壳,HBuilder之uni-app打包App方法

HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE。该软件既可以支持web代码编写,也可以将已经编写好的项目代码打包为手机APP。HBuilder提供的打包有云端打包和本地打包两种,云端打包的特点是DCloud官方配置好了原生的打包环境,可…

彭山计算机培训,彭山2021年初中生学计算机

建校以来,我校一直秉承“让每一个学生具备生存发展的能力,让更多学生体验成功”的办学理念,坚持“诚信、务实、精技、立业”和“先做人、后做事”为校训,多年来优秀的办学质量和成绩屡获***、教育主管部门、专家、家长等社会各界的…

计算机控制系统开关,电脑远程开关机控制器

原标题:电脑远程开关机控制器SPD-M05电脑远程开机/关机/复位远程控制器斯必得SPD-M05电脑远程开机/关机/复位控制器是专为各种服务器及无人值守机房电脑远程遥控开机/关机/复位所开发。该控制器采用电话远程遥控操作,无论你何时何地只要你拔打一个电话即…

caffe模型文件解析_深度学习 Caffe 初始化流程理解(数据流建立)

深度学习 Caffe 初始化流程理解(数据流建立)之前在简书的文章,搬迁过来 ^-^本文是作者原创,如有理解错误,恳请大家指出,如需引用,请注明出处。#Caffe FeatureMap数据流的建立 ##用语解释FeatureMap: 输入的图片信息或者…

函数计算机怎么去掉fix,excel怎么使用fix函数取整

fiv函数的作用是取整,在excel当中该如何使用呢?下面就跟学习啦小编一起看看吧。excel使用fix函数取整的步骤1、首先我们打开一个工作样表作为例子。2、使用altf11组合快捷键进入vbe编辑器,插入一个新的模块,并在模块中输入以下代码&#xff…

问道五周年服务器维护公告,问道五周年 欢乐嘉年华

任务卷轴任务卷轴记录卷轴任务的道具,可以交易、摆摊、放入商店、卖给NPC、丢弃等操作,道具为打怪掉落或者商城购买,分为5个等级,等级越高,难度系数越高。卷轴使用1、右键点击使用道具,与道具等级不符的玩家…

datagridview设置为勾选才可编辑_使用lightroom前,做好这几项设置,有助于更好使用...

工欲善其事,必先利其器。每一款软件都有它需要特别关注的地方,在使用前做好相应的配置,可以大大提升使用体验,正所谓“磨刀不误砍柴工”。那lightroom使用前需要进行哪些设置呢?一、进行【首选项】设置1、如何打开【首…

惠普服务器u盘做win7系统,惠普u盘装win7系统 利用u盘装win7系统

现如今随着社会水平的提高,无论办公还是生活都是越来越离不开电脑,电脑品牌也很多,惠普电脑是比较受人关注的品牌电脑,惠普电脑在使用过程中系统可能会越来越卡顿或者出问题需要U盘重装系统,有些新手用户对于系统重装还…

发那科攻丝回退参数_参数-Fanuc数控系统的攻丝拉拔动作倍率即回退速度倍率

众所周知Fanuc数控系统的参数多如牛毛。上千的参数,并且有的还是八位,虽然Fanuc发布有相关的参数说明书。但是,作为最终用户的我们,有的也只是公开发布的,也没有更新更全的相关资料。即便是有了相关书籍,又…

旋转轨迹_谁是最可怕的压轴题?——直线运动轨迹

运动问题是数学物理中非常喜欢研究的问题,这和我们本生生活的三维空间有密切的关系,我们无时无刻都在运动着,不论是坐着、站着还是躺着,都在不断运动。运动有复杂的运动,也有简单的运动,今天我们我们来聊一…

elementui表单校验原始密码_javascript 中入门数据校验

1.onSubmit 放在表单中,返回false为不提交 ,所以 放一个函数在里面所有的 数据获取,数据判断;都在内;(把一个value放到一个值,和另一个value值比对);2.获取提交的数据 ,判…

状态反射在体育运动中的作用_体育运动木地板时刻运行在最佳状态的秘诀

每日、每月和年度的维护可保持体育运动地板的外观和运动性能表现在最佳状态。大中小学校体育馆和商业运营场馆的维保人员承担着很多责任,其中最重要的是运动地板的护理和维护。体育场馆的运动地面一般由体育木地板、PVC地板或硅PU、丙烯酸地面等组成,因此…