一、MVP 是什么?
MVP,全称 Model-View-Presenter,它是从经典的 MVC 演变而来的一个开发思想。应用分层结构,使得各层结构各司其职,其中 Model 层负责提供数据,View 层负责页面展示,Presenter 负责业务逻辑处理。
二、MVP 有什么好处?
上面两张图分别是 MVC 和 MVP 的结构层次划分图,可以看到 MVP 相较于 MVC 的优点在于 View 和 Model 层间的完全解耦。
三、在 android 项目中搭建自己的 MVP 框架
现有 android 项目中,为了便于更好的开发和维护,基本采用 MVP 框架进行开发。下面我们将一步一步进行 MVP 框架的搭建。
public interface IBaseView {
Activity getActivity();
}
public abstract class EABaseActivity<P extends EABasePresenter> extends AppCompatActivity
implements IBaseView {
private boolean isFirst = true;
protected P presenter;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
generatePresenter();
setContentView(getLayoutId());
findViews();
addEvents();
if (presenter != null) presenter.onBundle(getIntent().getExtras());
}
private void generatePresenter() {
Type type = getClass().getGenericSuperclass();
try {
Type[] types = ((ParameterizedType) type).getActualTypeArguments();
presenter = (P) ((Class) types[0]).newInstance();
presenter.setView(this);
} catch (Exception e) {
e.printStackTrace();
}
}
protected abstract int getLayoutId();
protected void findViews() {
}
protected void addEvents() {
}
public Activity getActivity() {
return this;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (presenter != null) {
presenter.onActivityResult(requestCode, resultCode, data);
}
}
@Override
protected void onStart() {
super.onStart();
if (isFirst) {
if (presenter != null) presenter.onAttach();
isFirst = false;
}
}
@Override
protected void onResume() {
super.onResume();
if (presenter != null) presenter.onResume();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (presenter != null) {
presenter.onDetach();
presenter = null;
}
}
}
Activity 的基类。
public class EABasePresenter<V extends IBaseView> {
protected V view;
public void setView(V view) {
this.view = view;
}
public void onBundle(Bundle bundle) {
}
public void onAttach() {
}
public void onResume() {
}
public void onDetach() {
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}
四、总结
基本思想大体如此,还是要根据不同的项目进行自己调整,当然这个框架还很不完善,在此只不过是抛块砖罢了。