办公空间设计定位,镇海seo关键词优化费用,小公司网站模版,深圳保障性住房可以买卖吗前言在做Android开发时,我们通常为了更合理,更高效,优质的开发项目,并不是直接上来就开始开发功能,而是先搭建好自己的一个开发框架,一个好的开发框架,通常会让我们事倍功半,它就好比我们去建造一个房子,如果你的地基打的越深,越牢固,那么就可以建造出很高很大的房子.在搭建一个…前言在做Android开发时,我们通常为了更合理,更高效,优质的开发项目,并不是直接上来就开始开发功能,而是先搭建好自己的一个开发框架,一个好的开发框架,通常会让我们事倍功半,它就好比我们去建造一个房子,如果你的地基打的越深,越牢固,那么就可以建造出很高很大的房子.在搭建一个框架前,我们先要考虑一下,这个框架要达到一个什么样的效果,主要从下面三点来进行考虑:降低项目的复杂度易扩展,易修改,可用性强,可维护性强职责单一,功能清晰Mvp模式介绍优势分离了视图逻辑和业务逻辑降低了耦合。Activity只处理生命周期的任务代码变得更加简洁。视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中提高代码的阅读性。Presenter被抽象成接口可以有多种具体的实现所以方便进行单元测试。把业务逻辑抽到Presenter中去避免后台线程引用着Activity导致Activity的资源无法被系统回收从而引起内存泄露和OOM。实际应用框架图此图是我搭建Mvp模式的一个架构图,V层与M层分离,通过P层来建立联系,V层主要显示UI,M层进行网络请求,数据库等操作,P层作为一个中心管理器,连接M层和V层.分包如下图:image.pngbase 存放app的基类common 存放一些常量,接口,公用的东西contract 连接V层和P层的一个契约包model M层,数据库,网络请求,服务等业务操作presenter P层,负责连接V层和M层,中心管理器ui V层,负责UI的展示utils 存放工具类widget 存放自定义的一些组件步骤介绍第一步 编写基类BaseActivity,BasePresenter,IBasePresenter,IBaseViewIBasePresenter代码如下: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*/Overridepublic void attachView(V view) {this.mView view;}}BaseActivity代码如下:public abstract class BaseActivity extends AppCompatActivity implements IBaseView{//P层的应用protected P mPresenter;Overrideprotected void onCreate(Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(getLayoutId());//初始化mPresenterinitPresenter();//绑定viewif(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 {Overrideprotected void initPresenter() {mPresenter new MainPresenter();}Overrideprotected void initView() {mPresenter.testGetMpresenter();mPresenter.testDb();mPresenter.testRequestNetwork();mPresenter.testPreference();}Overrideprotected int getLayoutId() {return R.layout.activity_main;}Overridepublic void testGetMview() {Log.d(print, 我是V层的引用);}}MainPresenter代码如下:public class MainPresenter extends BasePresenter implements MainContract.Presenter{Overridepublic void testGetMpresenter() {Log.d(print, 我是P层的引用);mView.testGetMview();}Overridepublic void testDb() {mDataManager.testDb();}Overridepublic void testRequestNetwork() {mDataManager.testRequestNetwork();}Overridepublic 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;}Overridepublic void testDb() {mAppDbHelper.testDb();}Overridepublic void testRequestNetwork() {mAppApiHelper.testRequestNetwork();}Overridepublic void testPreference() {mAppPreferenceHelper.testPreference();}}第三步 编写数据库,网络请求等类AppDbHelper代码如下:public interface AppDbHelper {void testDb();}DbHelper代码如下:public class DbHelper implements AppDbHelper{Overridepublic void testDb() {Log.d(print, 数据库操作);}}AppApiHelper代码如下:public interface AppApiHelper {void testRequestNetwork();}ApiHelper代码如下:public class ApiHelper implements AppApiHelper{Overridepublic void testRequestNetwork() {Log.d(print, 网络请求操作);}}AppPreferenceHelper代码如下:public interface AppPreferenceHelper {void testPreference();}PreferenceHelper代码如下:public class PreferenceHelper implements AppPreferenceHelper{Overridepublic void testPreference() {Log.d(print, 共享参数存储操作);}}运行效果图:效果图总结Mvp模式在Android开发中被使用的越来越多,尤其是配合RxJavaRetrofitOkhttpDagger2Glide等第三方开源库,好处不用多说,所以大家赶紧都用起来吧,最后附上Mvp模式Demo如果大家对我的文章感兴趣的话,请给我点个赞!!!