[android] 练习使用ListView(三)

[android] 练习使用ListView(三),第1张

概述解决OOM和图片乱序问题

解决OOM和图片乱序问题

package com.androID.test;import java.io.inputStream; java.net.httpURLConnection; java.net.URL; com.nostra13.universalimageloader.core.ImageLoader; com.nostra13.universalimageloader.core.ImageLoaderConfiguration; com.nostra13.universalimageloader.core.assist.FailReason; com.nostra13.universalimageloader.core.Listener.ImageLoadingListener; androID.app.Activity; androID.graphics.Bitmap; androID.graphics.BitmapFactory; androID.graphics.drawable.BitmapDrawable; androID.os.AsyncTask; androID.os.Bundle; androID.support.v4.util.LruCache; androID.vIEw.VIEw; androID.vIEw.VIEwGroup; androID.Widget.BaseAdapter; androID.Widget.ImageVIEw; androID.Widget.listadapter; androID.Widget.ListVIEw; androID.Widget.TextVIEw;public class MainActivity extends Activity {    private ListVIEw lv_images;    @OverrIDe    protected voID onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentVIEw(R.layout.activity_main);        lv_images = (ListVIEw) findVIEwByID(R.ID.lv_images);                ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this);        ImageLoader.getInstance().init(configuration);                listadapter adapter = new ImageAdapter();        lv_images.setAdapter(adapter);    }    /**     * 适配器     * @author taoshihan     *     */    class ImageAdapter  BaseAdapter {         ListVIEw mListVIEw;        private LruCache<String,BitmapDrawable> mImageCache;        public ImageAdapter() {            int maxSize=(int) (Runtime.getRuntime().maxMemory()/1024)/8;            mImageCache=new LruCache<String,1)">(maxSize){                int sizeOf(String key,BitmapDrawable drawable) {                    return drawable.getBitmap().getByteCount()/1024;                 };            };        }        @OverrIDe        public VIEw getVIEw( position,VIEw convertVIEw,VIEwGroup parent) {            //第三个参数就是ListVIEw            if(mListVIEw==null){                mListVIEw=(ListVIEw) parent;            }                        String url=(String) getItem(position);            VIEw vIEw;            if(convertVIEw!=){                vIEw=convertVIEw;            }else{                vIEw=VIEw.inflate(getApplicationContext(),R.layout.image_item,);            }            ImageVIEw imageVIEw=(ImageVIEw) vIEw.findVIEwByID(R.ID.tv_image);            给ImageVIEw设置标签            imageVIEw.setTag(url);            BitmapDrawable bitmapDrawable=getBitmapFromMemoryCache(url);            if(bitmapDrawable!=){                读取缓存图片                imageVIEw.setimageDrawable(bitmapDrawable);            }{                读取网络图片                ImageWorkerTask task= ImageWorkerTask(mListVIEw,url);                task.execute(url);            }            return vIEw;        }                 * 从缓存中读取图片         * @param key         * @return          */         BitmapDrawable getBitmapFromMemoryCache(String key) {            if(mImageCache.get(key)!= mImageCache.get(key);            }            return ;        }         addBitmapToMemoryCache(String key,BitmapDrawable drawable){            if(getBitmapFromMemoryCache(key)==){                mImageCache.put(key,drawable);            }        }        @OverrIDe         getCount() {             Todo auto-generated method stub             Images.IMAGE_URLS.length;        }        @OverrIDe        public Object getItem( position) {             Images.IMAGE_URLS[position];        }        @OverrIDe        long getItemID( position;        }                 * 异步任务         *  taoshihan         *         class ImageWorkerTask extends AsyncTask<String,VoID,1)">{             ImageVIEw imageVIEw;             ImageWorkerTask(ListVIEw parent,String imageUrl) {                在ListVIEw中通过标签找到ImageVIEw控件                this.imageVIEw=(ImageVIEw) parent.findVIEwWithTag(imageUrl);            }            @OverrIDe            protected BitmapDrawable doInBackground(String... params) {                String imageUrl=params[0];                Bitmap bitmap=downLoadBitmap(imageUrl);                BitmapDrawable drawable= BitmapDrawable(getApplicationContext().getResources(),bitmap);                addBitmapToMemoryCache(imageUrl,drawable);                 drawable;            }            下载图片             Bitmap downLoadBitmap(String imageUrl) {                Bitmap bitmap=;                try {                    URL url= URL(imageUrl);                    httpURLConnection conn=(httpURLConnection) url.openConnection();                    conn.setConnectTimeout(10000);                    inputStream is=conn.getinputStream();                    bitmap=BitmapFactory.decodeStream(is);                } catch (Exception e) {                }                 bitmap;            }            下载完成的            @OverrIDe             onPostExecute(BitmapDrawable result) {                if(imageVIEw!=null&&result!=){                    imageVIEw.setimageDrawable(result);                }            }                    }    }    static class Images{        final static String[] IMAGE_URLS =  String[]{            "http://img.my.csdn.net/uploads/201508/05/1438760758_3497.jpg","http://img.my.csdn.net/uploads/201508/05/1438760758_6667.jpg"        };    }}

 

总结

以上是内存溢出为你收集整理的[android] 练习使用ListView(三)全部内容,希望文章能够帮你解决[android] 练习使用ListView(三)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1121193.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-29
下一篇2022-05-29

发表评论

登录后才能评论

评论列表(0条)

    保存