移动架构42_Android项目中MVP简单实现
2018-01-10 14:32
465 查看
角色:
Contact 规范V和P的操作,将其放到一起管理
View 页面层行为的抽取(可以有父接口)
Presenter 网络层行为的抽取(可以有父接口)
例如Retrofit+RxJava实现网络请求时:
###(1)请求时:
判断页面是否存在,然后将网络添加管理
###(2)页面销毁是,清空请求
Contact 规范V和P的操作,将其放到一起管理
View 页面层行为的抽取(可以有父接口)
Presenter 网络层行为的抽取(可以有父接口)
1 Contact
public class FunctionContact { public interface View extends BaseView<Presenter> { /** * 刷新UI数据 */ void setUI(String msg); /** * View层是否存在(如:Fragment的isAdded) * * @return */ boolean isActive(); } public interface Presenter extends BasePresenter { /** * 请求网络 * @param param 请求参数 */ void requestData(String param); } }
2 View
public interface BaseView<T> { void setPresenter(T presenter); }
3 Presenter
public interface BasePresenter { /** * 加入请求时,具体看业务逻辑调用 */ void subscribe(); /** * 取消请求 */ void unsubscribe(); }
4 具体实现Presenter 和View
public class FunctionPresenter implements FunctionContact.Presenter { private final FunctionContact.View view; private Context mContext; public FunctionPresenter(Context context,FunctionContact.View view){ mContext = context; this.view = view; this.view.setPresenter(this); } @Override public void subscribe() { } @Override public void unsubscribe() { //清除网络请求的逻辑 } @Override public void requestData(String param) { if(view.isActive()){ //发出请求, //.. 请求回调后.. view.setUI("回调的数据"); //..... } } }
public class MainActivity extends AppCompatActivity implements FunctionContact.View { private FunctionContact.Presenter presenter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); new FunctionPresenter(getApplicationContext(),this); } @Override public void onContentChanged() { presenter.requestData("参数"); } @Override public void setPresenter(FunctionContact.Presenter presenter) { this.presenter = presenter; } @Override public void setUI(String msg) { //页面显示UI } @Override protected void onDestroy() { super.onDestroy(); presenter.unsubscribe(); } @Override public boolean isActive() { //Activity销毁时,不请求 return isFinishing(); } }
5 拓展
可以在subscribe和unsubscribe来取消网络,从而防止页面关闭时,还去刷新UI造成View泄漏,或View为null异常;例如Retrofit+RxJava实现网络请求时:
###(1)请求时:
判断页面是否存在,然后将网络添加管理
CompositeDisposable disposables = new CompositeDisposable(); disposables.add(observable.subscribeWith(observer));
###(2)页面销毁是,清空请求
disposables.clear();
相关文章推荐
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
- Android实现简单移动动画
- Android开发架构模式MVP的简单思考
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
- Android中通过ViewHelper.setTranslationY实现View移动控制(NineOldAndroids开源项目)
- Android:实现最简单的单指移动、双指缩放的图片组件
- 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(一)
- Android 练习项目 ——简单记账软件的实现
- Android官方MVP架构示例项目解析
- Android应用架构之MVP实现
- Android官方MVP架构示例项目解析
- [Android学UI之一]简单实现移动应用左右滑动导航页面
- Android官方MVP架构示例项目解析
- android实践项目一实现简单的验证码和spinner下拉选项效果
- 【架构设计】MVP与MVC,实现Android应用层开发
- Android 简单游戏实现笑脸的移动与人物移动
- 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(二)
- Android官方MVP架构示例项目解析
- 【Android开发经验】移动设备的“声波通信/验证”的实现——SinVoice开源项目介绍(三)
- 如何使用MVP架构Android应用项目