单一原则

定义:不要存在多于一个导致类变更的原因。通俗的说,即一个类只负责一项职责。

优点:

降低了类的复杂度。一个类只负责一项职责比负责多项职责要简单得多。
提高了代码的可读性。一个类简单了,可读性自然就提高了。
提高了系统的可维护性。代码的可读性高了,并且修改一项职责对其他职责影响降低了,可维护性自然就提高了。
变更引起的风险变低了。单一职责最大的优点就是修改一个功能,对其他功能的影响显著降低。

一个类负责一个功能,易于修改代码

public class ImageCache {
    private LruCache<String ,Bitmap> mMemoryCacle=null;

    public ImageCache(){
        initImageCache();
    }
    private void initImageCache(){
        //计算可用的内存
        int maxMemory= (int) Runtime.getRuntime().maxMemory();
        //设置最大为内存的1/4
        int cacheSize=maxMemory/4;
        mMemoryCacle=new LruCache<String, Bitmap>(cacheSize){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getHeight()*value.getRowBytes()/1024;
            }
        };
    }
    public void put(String url,Bitmap bitmap){
        mMemoryCacle.put(url,bitmap);
    }

    public Bitmap get(String url){
        return  mMemoryCacle.get(url);
    }
}

public class ImageLoader {
    //缓存图片
    ImageCache imageCache=new ImageCache();
    //线程池
    ExecutorService mExecutorService= Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());

    //加载
    public void displayImage(final String url, final ImageView imageView){
        Bitmap bitmap=imageCache.get(url);
        if (bitmap!=null){
            imageView.setImageBitmap(bitmap);
            return;
        }
        imageView.setTag(url);
        mExecutorService.submit(new Runnable() {
            @Override
            public void run() {
                Bitmap bitmap=downloadImage(url);
                if (bitmap==null){
                    return;
                }
                if (imageView.getTag().equals(url)){
                    imageView.setImageBitmap(bitmap);
                }
                imageCache.put(url,bitmap);
            }
        });
    }

    public Bitmap downloadImage(String imageUrl){
        Bitmap bitmap=null;
        try {
            URL url=new URL(imageUrl);
            HttpURLConnection connection= (HttpURLConnection) url.openConnection();
            bitmap= BitmapFactory.decodeStream(connection.getInputStream());
            connection.disconnect();
        }
        catch (Exception e){
            e.printStackTrace();
        }
        return bitmap;
    }
}

注意

单例模式 要使用Application,不能使用Context,因为单例模式的生命周期和Application一样长,如果使用Context,但Activity销毁时,由于Activity正在被单例模式引用,所以容易导致内存泄露
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值