国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Android - Android 異步加載圖片的實例代碼

Android 異步加載圖片的實例代碼

2021-01-16 13:41Android開發網 Android

異步加載圖片主要是利用多線程進行下載、圖片弱引用緩存和Handler操作UI進行實現的。

異步加載圖片的主要流程是進行判斷緩存中是否存在圖片,如果存在則直接返回,如果不存在則進行下載并進行緩存。

以下是建立一個異步下載類:

復制代碼 代碼如下:


/**
 * User: Tom
 * Date: 13-5-13
 * Time: 下午8:07
 */
public class AsnycImageLoader {

 

    //定義一個HashMap進行存放緩存的Image key為String Value為一個弱引用的一個資源文件
    // 圖片 為了方便JAVA的回收
    private Map<String, SoftReference<Drawable>> imageCache = null;
    public AsnycImageLoader() {
        imageCache = new HashMap<String, SoftReference<Drawable>>();
    }

    /**
     * 加載圖片
     * <p>imageurl為下載資源的URL,
     * ImageCallback當緩存中不存在相關圖片時時行網絡下載
     * 在多線程下要使用Handler進行操作UI 利用回調接口的方式進行更新UI
     * </p>
     * @param imageUrl
     * @param callback
     * @return
     */
    public Drawable loadDrawable(final String imageUrl, final ImageCallback callback) {
        //進行判斷ImageCache中是否存在緩存圖片
        if (imageCache.containsKey(imageUrl)) {
            SoftReference<Drawable> softReference = imageCache.get(imageUrl);
            if (softReference.get() != null) {
                return softReference.get();
            }
        }
        //定義操作UI的Handler
        final Handler handler = new Handler() {
            @Override
            public void handleMessage(Message msg) {
                callback.imageLoaded((Drawable) msg.obj);
            }
        };

        new Thread(new Runnable() {
            @Override
            public void run() {
                Drawable drawable = loadImageFromUrl(imageUrl);
                imageCache.put(imageUrl, new SoftReference<Drawable>(drawable));
                Message message = handler.obtainMessage(0, drawable);
                handler.sendMessage(message);
            }
        }).start();
        return null;
    }

    //根據URL地址進行獲取資源
    protected Drawable loadImageFromUrl(String imageUrl) {
        try {
            return Drawable.createFromStream(new URL(imageUrl).openStream(), "src");
        } catch (Exception e) {
            throw new RuntimeException();
        }
    }

    //回調接口
    public interface ImageCallback {
        public abstract void imageLoaded(Drawable drawable);
    }
}

 

 

主Activity:

復制代碼 代碼如下:


/**
 * User: Tom
 * Date: 13-5-13
 * Time: 下午8:33
 */
public class LoadImage extends Activity {
    private AsnycImageLoader loader = null;

 

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.loadimages);

        loader = new AsnycImageLoader();

        loadImage("http://www.jfrwli.cn/images/icon-partners.png", R.id.image1);
        loadImage("http://www.jfrwli.cn/images/icon-dev.png", R.id.image2);
        loadImage("http://pic28.jb51.net/20130421/12302174_231210305323_2.jpg", R.id.image3);


    }

    public void loadImage(String url, int id) {
        final ImageView imageView = (ImageView) findViewById(id);
        Drawable cacheImage = loader.loadDrawable(url, new AsnycImageLoader.ImageCallback() {
            @Override
            public void imageLoaded(Drawable drawable) {
                imageView.setImageDrawable(drawable);
            }
        });
        if (cacheImage != null) {
            imageView.setImageDrawable(cacheImage);
        }
    }
}

 

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 日本一区二区三区免费观看 | 色综合av| 亚洲高清视频在线观看 | 久久久成人免费一区二区 | 成年人在线观看 | 国产精品自拍视频网站 | 亚洲国产91| 欧美狠狠操 | 黄瓜av | 黄色三及毛片 | 爱干视频| 欧美亚洲天堂 | 激情欧美一区二区三区中文字幕 | 自拍视频网 | 精品超碰 | 亚洲成人一级片 | 欧美日韩中文字幕 | 久久av综合 | 超黄网站在线观看 | 亚洲成人中文字幕 | 久久亚洲欧美日韩精品专区 | 综合激情网 | 久久情趣视频 | 一区二区三区www. | 亚洲综合自拍 | 免费观看av大片 | 亚洲视频中文字幕 | 成人日韩在线观看 | 大香伊蕉在人线视频777 | av午夜电影 | 欧美精品v国产精品v日韩精品 | 免费看黄色的视频 | 黄色tv网站 | 黄色片视频在线播放 | 中文字幕免费在线 | 精品国产色 | 国产美女网站 | 精品久久久久久亚洲精品 | 国产精品久久久久久久 | 色影视| 午夜电影网址 |