在android当中,mvc具体怎么对应关系了

m 对应的    android  javaBeanv  对应的是  android中布局layout.xmlc 对应的是   android中的 Activity

MVC弊端

1 依赖关系紧密,耦合度高,可维护性不强

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);    }}

效果


在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里面是存在内存泄漏的

更多相关文章

  1. MVP+RxJava+Dagger打造的Android(安卓)Album
  2. Android(安卓)Surfaceflinger 的使用
  3. android HandlerThread使用小例
  4. Android手动回收bitmap,引发Canvas: trying to use a recycled b
  5. 写一个android小闹钟
  6. android:drawableLeft的Button不能切换图片问题之解决办法
  7. android 应用程序自适应屏幕大小
  8. [置顶] editext文本输入框 软键盘下个按钮的问题
  9. android 图片浏览器 APP 源码

随机推荐

  1. C#、Golang、Python、Java(Android)之间Des
  2. Android(安卓)音频框架概述(一)之 AudioTra
  3. Android蓝牙开发
  4. Android读写XML(下)――创建XML文档
  5. 由浅入深研究Android(1)--开篇•序
  6. Android的源代码结构
  7. Android(安卓)webkit webkit中skia的使用
  8. Android(安卓)的视频编码 H263 MP4V H264
  9. Android(安卓)动态logo bootanimation.zi
  10. [004] 详解Windows平台搭建Androiod开发