android 面试 MVC MVP

308 阅读2分钟

MVC:

mode (模型):数据层,负责业务处理逻辑,监听网络 view (视图):界面UI层,显示来源于mode的数据 controller(控制器):逻辑层,传递用户的交互和更新mode的数据

在Android中,activity/fragment既有view 的性质也有conteoller的性质,会导致activity很重,代码量很大,维护和阅读复杂,MVC中view可与mode直接交互,导致activity与mode的耦合性很高,mode在操作view,因为activity直接持有mode层的引用(Mode mode = new Mode())

MVP:

mv还是原来数据层和UI层,只是把controller换成了presenter,改变了通信的方向,实现view与mode的隔离,通过presenter来实现view与mode的交互,比如说一个点击事件,view发送给presenter,presenter那个这个点击事件去找mode进行数据绑定,然后再通知view进行更新

presenter持有 mode和view层的引用,所以可以与mode和view进行交互,view持有mode的引用,通知mode取绑定数据 缺点,要创建大量的接口来进行结偶,所以项目中会出现大量的接口,比较繁琐

image.png

MVP如何管理Presenter的生命周期,何时取消网络请求

我们经常在 Android MVP 架构中的 Presenter 层做一些耗时操作,比如请求网络数据等。然后根据请求后的结果刷新 View。但是如果按返回结束 Activity,而 Presenter 依然在执行耗时操作,那么就有可能造成内存泄漏,严重时甚至会造成程序崩溃,因为 Presenter 中的 View 已经变为 null。为了解决这个问题,我们需要将 Activity 的某些生命周期方法与 Presenter 保持一致。

使用livecycle绑定presenter的生命周期 LifeCycle 的使用很简单,Activity 通过继承 AppCompatActivity 会自动继承来自父类 ComponentActivity 的方法 getLifeCycle。具体使用 img-blog.csdnimg.cn/20200929002…