国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

簡(jiǎn)單實(shí)現(xiàn)自己的類(lèi)似UniversalImageLoader網(wǎng)絡(luò)圖片加載緩存框架

shadajin / 1495人閱讀

摘要:前言一直以來(lái)都在用第三方框架加載圖片,因?yàn)檫@樣會(huì)省下不少的開(kāi)發(fā)成本,常用的一些如以及谷歌官方的圖片框架或者相似的都基本上能夠滿足我們開(kāi)發(fā)的需求。

前言

一直以來(lái)都在用第三方框架加載圖片,因?yàn)檫@樣會(huì)省下不少的開(kāi)發(fā)成本,常用的一些如universal-image-loader以及谷歌官方的圖片框架glide或者相似的picasso都基本上能夠滿足我們開(kāi)發(fā)的需求。
本著學(xué)習(xí)的態(tài)度,在參考了若干案例之后,站著擼了一個(gè)類(lèi)似universal-image-loader的框架,怎么評(píng)價(jià)它呢,一句話:湊合湊合能用吧~
已并入我自己寫(xiě)的小工具AnnUtils的imageloader模塊,傳送門(mén):github

原理

圖片加載緩存,工作原理:根據(jù)相關(guān)url加載圖片時(shí),第一先從內(nèi)存緩存中查找是否有該圖片的緩存,然后從文件緩存中查找是否有緩存,最后從指定的url中下載圖片。

主要代碼

主要方法:

public void displayImage(String url, ImageView imageView, int requiredSize, OnImageLoaderListener listener) {
        imageViews.put(imageView, url);
        // 先從內(nèi)存緩存中查找
        Bitmap bitmap = memoryCache.get(url);
        if (bitmap != null){
            imageView.setImageBitmap(bitmap);
            if(null != listener){
                listener.onFinishedImageLoader(imageView, bitmap); // 通知完成加載
            }
        } else {
            // 若沒(méi)有的話則設(shè)置成默認(rèn)圖片,并開(kāi)啟新線程加載真實(shí)需要的圖片
            imageView.setImageResource(config.getDefaultResId());
            loadPhoto(url, imageView, requiredSize, listener);
        }
    }

加載網(wǎng)絡(luò)圖片以及回調(diào)進(jìn)度參數(shù)的方法

/**
     * 執(zhí)行網(wǎng)絡(luò)請(qǐng)求加載圖片
     * @param url
     * @param requiredSize
     * @return
     */
    private Bitmap getBitmap(String url, int requiredSize, PhotoToLoad photoToLoad) {
        File f = fileCache.getFile(url);
        // 先從文件緩存中查找是否有
        Bitmap b = decodeFile(f, requiredSize);
        if (b != null)
            return b;

        // 最后從指定的url中下載圖片
        try {
            Bitmap bitmap = null;
            URL imageUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection) imageUrl
                    .openConnection();
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);
            conn.setInstanceFollowRedirects(true);
            InputStream is = conn.getInputStream();
            OutputStream os = new FileOutputStream(f);
//            CopyStream(is, os, conn.getContentLength(), photoToLoad);

            photoToLoad.totalSize = conn.getContentLength();
            int buffer_size = 1024;
            byte[] bytes = new byte[buffer_size];
            for (; ; ) {
                int count = is.read(bytes, 0, buffer_size);

                if (count == -1){
                    break;
                }
                os.write(bytes, 0, count);

                if(null != photoToLoad.onImageLoaderListener){ // 如果設(shè)置了圖片加載監(jiān)聽(tīng),則回調(diào)
                    Message msg = handler.obtainMessage();
                    photoToLoad.currentSize += count;
                    msg.arg1 = IMAGE_LOADER_PROCESS;
                    msg.obj = photoToLoad;
                    handler.sendMessage(msg);
                }

            }

            is.close();
            os.close();
            bitmap = decodeFile(f, requiredSize);
            return bitmap;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

具體實(shí)現(xiàn)可以參考源碼

使用方式 配置初始化
AnnImageLoader.init(getApplicationContext(),
     new CacheConfig()
     .setDefRequiredSize(600) // 設(shè)置默認(rèn)的加載圖片尺寸(表示寬高任一不超過(guò)該值,默認(rèn)是70px)
     .setDefaultResId(R.drawable.ic_launcher) // 設(shè)置顯示的默認(rèn)圖片(默認(rèn)是0,即空白圖片)
     .setBitmapConfig(Bitmap.Config.ARGB_8888) // 設(shè)置圖片位圖模式(默認(rèn)是Bitmap.CacheConfig.ARGB_8888)
     .setMemoryCachelimit(Runtime.getRuntime().maxMemory() / 3) // 設(shè)置圖片內(nèi)存緩存大小(默認(rèn)是Runtime.getRuntime().maxMemory() / 4)
     .setFileCachePath(Environment.getExternalStorageDirectory().toString() + "/mycache") // 設(shè)置文件緩存保存目錄
 );
顯示圖片
AnnImageLoader.getInstances().displayImage(url,imageview, new AnnImageLoader.OnImageLoaderListener() {
            @Override
            public void onProgressImageLoader(ImageView imageView, int currentSize, int totalSize) {
                //進(jìn)度條
            }

            @Override
            public void onFinishedImageLoader(ImageView imageView, Bitmap bitmap) {
                //加載結(jié)束
            }
        });
總結(jié)

實(shí)現(xiàn)的方式很簡(jiǎn)單,有網(wǎng)絡(luò),有自定義控件,有涉及內(nèi)存的使用,雖然還有很多的不足,但是從中總結(jié)到了許多自己平常需要用到的知識(shí),就當(dāng)作是自己的一個(gè)鍛煉吧。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67586.html

相關(guān)文章

  • 圖片加載框架之UIL

    摘要:加載并顯示圖片或加載并執(zhí)行回調(diào)接口。加載圖片主要分為三類(lèi)接口表示異步加載并顯示圖片到對(duì)應(yīng)的上。以上三類(lèi)接口最終都會(huì)調(diào)用到這個(gè)函數(shù)進(jìn)行圖片加載。不允許訪問(wèn)網(wǎng)絡(luò)的圖片下載器。創(chuàng)建圖片下載器,返回一個(gè)。 1. 功能介紹 1.1 Android Universal Image Loader Android Universal Image Loader 是一個(gè)強(qiáng)大的、可高度定制的圖片緩存,本文簡(jiǎn)...

    lentrue 評(píng)論0 收藏0
  • 2019最新Android面試題

    摘要:若攔截事件返回為,表示攔截,事件不會(huì)向下層的或者傳遞,表示不攔截,繼續(xù)分發(fā)事件。五注冊(cè)反注冊(cè)未成對(duì)使用引起的內(nèi)存泄漏。七集合對(duì)象沒(méi)有及時(shí)清理引起的內(nèi)存泄漏。 原文鏈接:https://blog.csdn.net/wen_hah... 版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接! 前言 金三銀四到來(lái)了,找工作的好時(shí)候到了,小伙伴們是不是都在忙著找工作呢,小弟前一陣也是忙著在找工作,...

    plus2047 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<