Android中MVP模式的抽象MVP类,减少代码量,增加中断机制(三)
2017-12-24 00:28
507 查看
(本篇文章基于前两篇文章基础之上)
好了,内存泄漏解决了,现在解决下冗余的代码量。
回顾下上文
这3个操作是MainActivity中的,很冗余,而且可以说每个MVP都会有,所以这3个可以抽象。
我们需要创建抽象V接口类,抽象(为了以后V有公共操作,放这里)
增加BaseRequestActivity
不仅把绑定、解绑的操作抽象了,还抽象了部分创建P的代码。
最后是P的抽象类
最后个人喜欢中断机制 就保留了中断机制
不仅activity退出会中断网络请求,点击dialog外面的部分也会中断,非常的人性化。(不仅是中断网络请求,其他形式的中断也有,所以我保留了中断机制)
PS:ProgressDialog点击外面部分中断的代码
最后一个true是点击屏幕外面可取消,这个监听是监听dialog消失的监听,不管按返回键还是点击外面都能监听到
最后的最后onCreate也给抽象掉了,所以看一下BaseActivity的代码
子类
github地址:https://github.com/xubinhong/MVP2
好了,内存泄漏解决了,现在解决下冗余的代码量。
回顾下上文
public void attach(RequestView view) { this.mRequestView = view; } public void detach() { mRequestView = null; } public void interruptHttp() { mRequestModel.interruptRequest(); }
这3个操作是MainActivity中的,很冗余,而且可以说每个MVP都会有,所以这3个可以抽象。
我们需要创建抽象V接口类,抽象(为了以后V有公共操作,放这里)
public interface BaseRequestView { }
增加BaseRequestActivity
public abstract class BaseRequestActivity<V extends BaseRequestView, P extends BaseRequestPresenter<V>> extends BaseActivity implements BaseRequestView{ private P presenter; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (presenter == null) { presenter = createPresenter(); } if (presenter == null) { throw new NullPointerException("presenter返回值为空!"); } presenter.attach((V)this); } @Override protected void onDestroy() { super.onDestroy(); if (presenter != null) { presenter.detach(); } } protected abstract P createPresenter(); public P getPresenter() { return presenter; } }
不仅把绑定、解绑的操作抽象了,还抽象了部分创建P的代码。
最后是P的抽象类
public abstract class BaseRequestPresenter<V extends BaseRequestView> { private V mView; public void attach(V view) { mView = view; } public void detach() { mView = null; } public V getView() { return mView; } }
最后个人喜欢中断机制 就保留了中断机制
不仅activity退出会中断网络请求,点击dialog外面的部分也会中断,非常的人性化。(不仅是中断网络请求,其他形式的中断也有,所以我保留了中断机制)
PS:ProgressDialog点击外面部分中断的代码
dialog = ProgressDialog.show(this, "提示", "正在登陆中", false, true, new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { getPresenter().interrupt(); } });
最后一个true是点击屏幕外面可取消,这个监听是监听dialog消失的监听,不管按返回键还是点击外面都能监听到
最后的最后onCreate也给抽象掉了,所以看一下BaseActivity的代码
public abstract class BaseActivity extends AppCompatActivity { @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (initBundle(getIntent().getExtras())) { setContentView(getContentView()); ButterKnife.bind(this); initData(); initWidget(); } else { finish(); } } protected void initData() { } protected void initWidget() { } protected abstract int getContentView(); protected boolean initBundle(Bundle bundle) { return true; } }
子类
@Override protected int getContentView() { return R.layout.activity_main; }
github地址:https://github.com/xubinhong/MVP2
相关文章推荐
- Android当中的MVP模式(七)终篇---关于对MVP模式中代码臃肿
- 80386保护模式--中断机制,附pmtest9代码详解
- 用人类的思维方式去写更容易维护的代码——用<抽象-基础-逻辑>模式开发Java(Android)程序
- Android架构设计---MVP模式第(二)篇,如何减少类爆炸
- Android中MVP模式的内存泄漏解决及Retrofit2、RxJava中断网络请求(二)
- Android MVP 模式--让你的代码更加清晰,给你的代码瘦身
- 谷歌官方 Android MVP 模式代码解读
- 精简代码示例展示Android中MVP模式
- Android MVP模式 谷歌官方代码解读
- 安卓项目快速开发框架, MVP + Retrofit + RxJava,Activity 和 Fragment 结合 MVP 模式的完整封装,大大减少代码量
- Android架构设计---MVP模式第(二)篇,如何减少类爆炸
- Android 用代码开启和关闭飞行模式
- Android研究-Android深入浅出之Binder机制-跟着代码流程学binder[zz]
- java减少数据访问层代码—反射2—数据访问层Wrapper—增加数据源码
- 读代码细学内核中断机制-中断的注册
- ANDROID的 BLUETOOTH 实现机制--中介模式和代理模式
- 80386保护模式--分页机制,附pmtest8代码详解
- 读代码细学内核中断机制-中断的初始化
- Android 音量增加减少按钮事件
- 简单抽象工厂设计模式代码