MVC架构设计与经典三层模型

MVC架构设计与经典三层模型_第1张图片
在android当中,mvc具体怎么对应关系了

m 对应的    android  javaBean
v  对应的是  android中布局layout.xml
c 对应的是   android中的 Activity

MVC架构设计与经典三层模型_第2张图片

MVC弊端

1 依赖关系紧密,耦合度高,可维护性不强
MVC架构设计与经典三层模型_第3张图片
2 容易造成内存泄漏,我们先写个demo来看看,demo很简单,界面上一个按钮,一个imageview,点击按钮从网络上下载一张图片显示在imageview上

上代码

xml v 层

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:onClick="getImage"
        android:text="获取图片" />

    <ImageView
        android:id="@+id/image"
        android:layout_width="100dp"
        android:layout_height="100dp" />

</LinearLayout>

ImageBean M 层

public class ImageBean
{
    //网络图片地址
    private String  requestPath;

    //结果返回bitmap对象
    private Bitmap bitmap;

    public String getRequestPath()
    {
        return requestPath;
    }

    public void setRequestPath(String requestPath)
    {
        this.requestPath = requestPath;
    }

    public Bitmap getBitmap()
    {
        return bitmap;
    }

    public void setBitmap(Bitmap bitmap)
    {
        this.bitmap = bitmap;
    }
}

CallBack 回调接口

public interface CallBack
{
    /**
     *
     * @param resultCode 请求结果返回表示
     * @param imageBean  Model层数据中bitmap返回对象
     */
    void callBack(int resultCode,ImageBean imageBean);
}

ImageDownLoader 下载封装类

public class ImageDownLoader
{
    static final int SUCCESS = 200;
    static final int ERROR = 404;

    public void down(CallBack callBack, ImageBean imageBean)
    {
        new Thread(new DownLoader(callBack, imageBean)).start();
    }

    static final class DownLoader implements Runnable
    {
        private final CallBack callBack;
        private final ImageBean imageBean;

        DownLoader(CallBack callBack, ImageBean imageBean)
        {
            this.callBack = callBack;
            this.imageBean = imageBean;
        }

        @Override
        public void run()
        {
            try
            {
                URL url = new URL(imageBean.getRequestPath());
                HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
                httpURLConnection.setConnectTimeout(5000);
                httpURLConnection.setRequestMethod("GET");
                if (httpURLConnection.getResponseCode() == httpURLConnection.HTTP_OK)
                {
                    InputStream inputStream = httpURLConnection.getInputStream();
                    Bitmap bitmap = BitmapFactory.decodeStream(inputStream);
                    showUI(SUCCESS, bitmap);
                } else
                {
                    showUI(ERROR, null);
                }

            } catch (Exception e)
            {
                e.printStackTrace();
                showUI(ERROR, null);
            }
        }

        private void showUI(int error, Bitmap bitmap)
        {
            if (callBack != null)
            {
                imageBean.setBitmap(bitmap);
                callBack.callBack(error, imageBean);
            }
        }
    }
}

MainActivity 就是我们的 C 层

public class MainActivity extends AppCompatActivity implements CallBack
{
    private static final String path = "https://00imgmini.eastday.com/mobile/20191110/20191110082703_a92d66ea5d2c0b95575ea15128588762_1.jpeg";
    private ImageView imageView;
    @SuppressLint("HandlerLeak")
    private Handler handler=new Handler()
    {
        @Override
        public void handleMessage(Message msg)
        {
            switch (msg.what)
            {
                case ImageDownLoader.SUCCESS://成功的
                    imageView.setImageBitmap((Bitmap) msg.obj);
                    break;
                case ImageDownLoader.ERROR://失败的
                    Toast.makeText(MainActivity.this,"下载失败",Toast.LENGTH_SHORT).show();
                    break;
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=findViewById(R.id.image);
    }

    public void getImage(View view)
    {
        ImageBean imageBean=new ImageBean();
        imageBean.setRequestPath(path);
        new ImageDownLoader().down(this,imageBean);
    }

    @Override
    public void callBack(int resultCode, ImageBean imageBean)
    {
        Message message=handler.obtainMessage(resultCode);
        message.obj= imageBean.getBitmap();
        handler.sendMessageDelayed(message,500);
    }
}

效果

MVC架构设计与经典三层模型_第4张图片
在onCreate方法中添加几行代码

  @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView=findViewById(R.id.image);
        new Thread(new Runnable()
        {
            @Override
            public void run()
            {
                SystemClock.sleep(5000);
            }
        }).start();
    }

查看内存信息

可以看到MainActivity里面是存在内存泄漏的
MVC架构设计与经典三层模型_第5张图片

你可能感兴趣的:(架构)