一、概述
M:model层 一般指javabean对象 。当然也可以处理业务逻辑
V:就是我们的布局文件
C:Contraoller层 就是我们的activity。
二、使用
1、创建View等activity_mvc.xml,代码如下:
<!--View层-->
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/click"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</android.support.constraint.ConstraintLayout>
2、创建Model层,主要负责业务处理。
(1)创建结果回调接口Callback,代码如下:
public interface Callback {
void returnResult(MvcBean mvcBean);
}
(2)创建业务处理类,HttpEngine,代码如下:
//Model层
public class HttpEngine {
private Callback mCallback;
public HttpEngine(Callback callback) {
this.mCallback = callback;
}
public void post(){
if(mCallback != null){
mCallback.returnResult(new MvcBean("http://www.baidu.com"));
}
}
}
其中post方法就是主要的业务处理方法,并将结果返回给C层。
(3)创建Controller层,MvcActivity,代码如下:
//C层
public class MvcActivity extends AppCompatActivity implements Callback{
private HttpEngine mHttpEngine;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mvc);
mHttpEngine = new HttpEngine(this);
findViewById(R.id.click).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHttpEngine.post();
}
});
}
@Override
public void returnResult(MvcBean mvcBean) {
Log.e("返回结果----",mvcBean.toString());
}
}
执行点击事件,调用M层方法,得到结果返回给C层,设置控件V显示。
三、内存泄漏验证
1、在activity中创建一个耗时任务线程,代码如下:
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mvc);
mHttpEngine = new HttpEngine(this);
findViewById(R.id.click).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mHttpEngine.post();
}
});
//主线程中创建耗时任务
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(50000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
}
2、点击内存分析工具profiler。进入界面视图。此时将activity关闭,进行以下步骤:
3、选中packet模式,找到com包名,可以发现,当期包名下存在MvcActivity。但是此时activity已经销毁。从而发生了内存泄漏
四、总结
如果在activity中存在耗时任务的执行,当我们销毁activity时,由于耗时任务没有完成。导致activity没法被gc,就发生了内存泄漏。这也是android中mvc致命的缺陷。从而引入了mvp来解决这样的问题。