关闭

图片加载之三级缓存机制、AsyncTask优化、ComViewHolder极致优化ListView、LruCache搭配Runtime完美内存优化

标签: 图片加载三级缓存机制AsyncTask优化优化ListView内存优化
101人阅读 评论(0) 收藏 举报

    在网上看到好多加载图片缓存的的博客,但都不太完整,今天给大家介绍一款比较完整的加载图片并且防止加载卡顿优化的代码,并且完美修复未加载出来图片滑动后在另一个页面加载跳动尴尬:
首先,我们来介绍一下加载图片的步骤:
1. 开启子线程去加载图片
2.获得byte[]  三级缓存:2.1  从内存获取 2.2  从磁盘获取2.3  从网络获取
3. 把byte[] 转成bitmap对象
4. 回到主线程 把bitmap对象 设置给ImageView
    其次,再讲解一下优化:
 优化,分为内存优化、线程优化、代码优化:
 1.内存优化

     我们使用系统提供的LruCache方法来优化内存,LruCache就是Least Recent Used Cache的简称,它可以在listView滑动时指定内存大小,超过这个内存就自动释放压在最  后面的内存;

 使用方法:
     ①构造时传入容量,其他用法和Map相似
     ② 重写sizeOf方法,来指定不同元素的权重,也要修改构造容量与之对应
 2.线程优化
 线程池 的构造方法

 3.代码简化 使用AsyncTask
 AsyncTask的优缺点:
 优点:
     易于使用(子线程和主线程切换)
     缺点:都是围绕着线程池的
         1 如果同时给太多的任务去做,队列会爆掉,导致程序崩溃
         2 在旧版(<19)的源码上,最大线程数是128,会导致过多的资源用在线程的切换上
         3 对于不同优先级的任务,不能优先处理,会导致优先级高的迟迟得不到处理
 解决:
     使用两个参数的 executeOnExecutor方法 ,指定满足我们需要的 线程池

 Runtime类可实现获取系统内存

Runtime mRuntime = Runtime.getRuntime();
    { // 代码中的内存 <= app的内存 <-jvm <- 进程 <- os <- 硬件
        // 已经分配,但没有使用的内存
        mRuntime.freeMemory();
        // 已经分配的内存
        mRuntime.totalMemory();
        // 可分配的最大内存
        mRuntime.maxMemory();}


 Pair<F,S>
    new Pair<F,S>(F f,S s)
    Pair.create(F f,S s)
   可使用 pair.first获取里面的第一个引用
    可使用pair.second获取里面的第二个引用

 最后,正确地使用图片工具类需要注意:
 1. 尽量单例地去使用图片加载工具类
 2. 尽量在一个项目中只是用1个图片加载工具类
 3. 如果有可能的化,应该把图片加载工具类封装一把

 4. 缩放图片

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//首先,在layout文件夹创建一个item文件,写一个imageView控件,以适应图片的加载显示位置

<ImageView
        android:id="@+id/item_iv"
        android:layout_width="100dp"
        android:layout_height="100dp"
        />

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//图片加载工具类

public class MyBitmapUtil {
    static Handler handler = new Handler();
    private final File mCacheDir;
    Runtime mRuntime = Runtime.getRuntime();
    {
        // 代码中的内存 <= app的内存 <-jvm <- 进程 <- os <- 硬件
        // 已经分配,但没有使用的内存
        mRuntime.freeMemory();
        // 已经分配的内存
        mRuntime.totalMemory();
        // 可分配的最大内存
        mRuntime.maxMemory();
    }
    LruCache<String, byte[]> cache = new LruCache<String, byte[]>((int) (mRuntime.maxMemory() / 8)) { //mRuntime.maxMemory() / 8是为适应不同RAM机型适配分配内存
        @Override
        protected int sizeOf(String key, byte[] value) {
            return value.length;
        }
    };
//    Map<String, byte[]> cache = new HashMap<>();
    public MyBitmapUtil(Context context) {
        mCacheDir = new File(Environment.getExternalStorageDirectory(), "/MBU/" + context.getPackageName());
        mCacheDir.mkdirs();
    }
    private ThreadPoolExecutor mThreadPoolExecutor = new ThreadPoolExecutor(3, 5, 1, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>());
    public void display(ImageView iv, String url) {
//        iv.setImageResource(R.mipmap.ic_launcher);
//        1 开启子线程去加载图片
//        new Thread(new LoadImageRunnable(iv, url)).start();
        iv.setImageBitmap(null);
        // 做标记
        iv.setTag(url);
//        mThreadPoolExecutor.execute(new LoadImageRunnable(iv, url));
        new LoadImageTask().execute(Pair.create(url, iv));
//        new LoadImageTask().executeOnExecutor(,Pair.create(url, iv));
    }
    private Bitmap getBitmap(byte[] bytes, ImageView imageView) {
        BitmapFactory.Options option = new BitmapFactory.Options();
        option.inJustDecodeBounds = true;
        BitmapFactory.decodeByteArray(bytes, 0, bytes.length, option);
        int outHeight = option.outHeight;
        int outWidth = option.outWidth;
        float scaleH = 1.0f * outHeight / imageView.getHeight();
        float scaleW = 1.0f * outWidth / imageView.getWidth();
        float scale = scaleH > scaleW ? scaleH : scaleW;
        option.inSampleSize = (int) scale;
        option.inJustDecodeBounds =false;
//        Bitmap before = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
        Bitmap after = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, option);
//        Log.d("getBitmap" , before.getByteCount() + "   " + after.getByteCount());

        return after;
    }
    private byte[] getBytes(String url) throws IOException {
        byte[] result = null;
//        2.1  从内存获取
        result = readFromMem(url);
        if (result != null) {
            Log.d("getBytes", "内存");
            return result;
        }
//        2.2  从磁盘获取
        result = readFromDisk(url);
        if (result != null) {
            Log.d("getBytes", "磁盘");
            writeToMem(url, result);
            Log.d("getBytes", "cache " + cache.size());
            return result;
        }
//        2.3  从网络获取
        result = readFromNet(url);
        Log.d("getBytes", "网络");
        writeToDisk(url, result);
        writeToMem(url, result);
        return result;
    }
    private byte[] readFromMem(String url) {
        return cache.get(url);
    }
    private void writeToMem(String url, byte[] bytes) {
        cache.put(url, bytes);
    }
    private byte[] readFromDisk(String url) throws IOException {
//        url-> File  -> FileInputStream -> ByteArrayOutputStream -> byte[]
        File file = getFile(url);
        if (!file.exists()) {
            return null;
        }
        FileInputStream fis = null;
        ByteArrayOutputStream baos = null;
        try {
            fis = new FileInputStream(file);
            baos = new ByteArrayOutputStream();
            copyStream(fis, baos);
            return baos.toByteArray();
        } finally {
            closeStream(fis);
            closeStream(baos);
        }
    }
    private void writeToDisk(String url, byte[] bytes) throws IOException {
        // 写入磁盘 = 写入文件
        // 文件 = 文件夹 + 文件名
        File file = getFile(url);
        // file -->fileOutputStream --> 写入
        FileOutputStream fileOutputStream = null;
        try {
            fileOutputStream = new FileOutputStream(file);
            fileOutputStream.write(bytes);
        } finally {
            closeStream(fileOutputStream);
        }
    }
    private File getFile(String url) {
        // 文件 = 文件夹 + 文件名
        // 文件名的要求: 1 不重复 2 合法 3 同一个url应该得到同一个文件
        // md5 去弄文件名
        return new File(mCacheDir, md5(url));
    }
    private byte[] readFromNet(String urlString) throws IOException {
        //  url -> InputStream -> ByteArrayOouputStream ->byte[]
        URL url = new URL(urlString);
        InputStream inputStream = null;
        ByteArrayOutputStream baos = null;
        try {
            inputStream = url.openStream();
            baos = new ByteArrayOutputStream();
            copyStream(inputStream, baos);
            return baos.toByteArray();
        } finally {
            closeStream(inputStream);
            closeStream(baos);
        }
    }
    private static void closeStream(Closeable closeable) {
        if (closeable != null) {
            try {
                closeable.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    private static void copyStream(InputStream is, OutputStream os) throws IOException {
        int len = 0;
        byte[] buf = new byte[1024];
        while ((len = is.read(buf)) != -1) {
            os.write(buf, 0, len);
        }
    }
    private class LoadImageTask extends AsyncTask<Pair<String,ImageView> ,Void,Pair<Bitmap,Pair<String, ImageView>>>{
        @Override
        protected Pair<Bitmap, Pair<String, ImageView>> doInBackground(Pair<String, ImageView>... params) {
            Pair<String, ImageView> param = params[0];
            try {
                //            2 获得byte[]
                byte[] bytes = getBytes(param.first);
//            3 把byte[] 转成bitmap对象
                Bitmap bitmap = getBitmap(bytes, param.second);
//
                return new Pair<Bitmap, Pair<String, ImageView>>(bitmap,param);
            } catch (Exception e) {
                e.printStackTrace();
                 return null;
            }
        }

        @Override
        protected void onPostExecute(Pair<Bitmap, Pair<String, ImageView>> result) {
            if(result.second.first.equals( result.second.second.getTag()) ){ // 检查标记
                result.second.second.setImageBitmap(result.first);
            }
        }
    }

    public static String md5(String md5) {
        try {
            java.security.MessageDigest md = java.security.MessageDigest.getInstance("MD5");
            byte[] array = md.digest(md5.getBytes());
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < array.length; ++i) {
                sb.append(Integer.toHexString((array[i] & 0xFF) | 0x100).substring(1, 3));
            }
            return sb.toString();
        } catch (java.security.NoSuchAlgorithmException e) {
        }
        return null;
    }

}

//------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//然后在layout文件夹main_activity文件中写一个ListView控件用来填充Activity

<ListView
        android:id="@+id/lv"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

//在mainActivity中写入以下代码;

public class MainActivity extends Activity {
    private MyBitmapUtil mMyBitmapUtil;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mMyBitmapUtil = new MyBitmapUtil(this);
        ListView listView = (ListView) findViewById(R.id.lv);
        listView.setAdapter(mBaseAdapter);
    }

    private BaseAdapter mBaseAdapter = new BaseAdapter() {
        @Override
        public int getCount() {
            return list == null  ? 0 : list.size();
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

       //CommonViewHolder 是急剧优化的listView;其有3个优点:

       //1、减少findviewById的次数

       //2.复用convertView,防止oom

       //3.增强代码复用性

            CommonViewHolder cvh = CommonViewHolder.createCVH(convertView,parent,R.layout.item);
            mMyBitmapUtil.display(cvh.getIv(R.id.item_iv) , list.get(position));
            return cvh.convertView;
        }

        @Override
        public Object getItem(int position) {
            return null;
        }

        @Override
        public long getItemId(int position) {
            return 0;
        }
    };

//往集合中添加测试数据;

    List<String> list = new ArrayList<>();

    //添加测试数据 

{
        list.add("http://ym.zdmimg.com/201509/08/55ee8ba231eb5.jpg_d200.jp");
        list.add("http://ym.zdmimg.com/201509/08/55ee9c5c41a7c1420.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee87f4a92e8.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee96852b351.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9aece0a8d.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7c2110f12.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7c0a21d4b.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee87a3d180e.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee91be9d6f1.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee98c5825036013.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9936cc58d1475.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7c426517a.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee94e87bdd75719.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee93e07603c2316.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee866fd49e7.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee932392cdc8792.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee937cce6f6622.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee92b971f3c2272.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee91c3a890c5538.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9146d5d2b5060.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee8d42bf4aa.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea03e15dd3.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee8ba73d873.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee8634b6972.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee8a67e9992.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea457dd5693052.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9c70c4fc92262.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea2d11f3c53202.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea250a8f2c8031.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee88c9e2c76.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee996f837834313.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea1d6ab88d133.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9de545d44907.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee98070351d.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7f2f60e87.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea0f2689b28273.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea551018104929.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7e4fd37ef.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee84fe7bae1.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9daa4c7624200.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeb92aa198b.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9eaf9c6aa.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeb17b5530d.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeb1df21c972378.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee975725611.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee8a04cc706.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeab36932ad5689.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/02/55e6e7520c3ae.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9ad536ca4.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea92e7fca27576.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeac17d97a94050.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea2ede8fbd.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea638e64fc7135.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea579e701f.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea3992a48f2235.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeaa4da9d3c6655.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee8e04aabf1.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9a097492f.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea0678ae44.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea58f3cbb23749.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeab4936ff9.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeb1a08dbc5.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea820a046b.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eed58996d9a.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eed339177be.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea2147dd35.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee9f96ab830.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee99135aa38.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee957da4931.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eec71f0ec2c.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eecd220e375.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eea6a376dae.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee8dee3634f.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eeccf48cd05554.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee87baee15c.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eebf3945a967120.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eebfc09cdf7.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eec347045023508.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7f45bf95a.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55eebe606f33f5785.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee774fb74396631.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee5a66a0085.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7899600a34093.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee77340f62a6023.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6337431c7.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee681e72cf7.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee68d19b580.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee76f96dcbe1795.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee77517e7aa4763.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee690da1cb7.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee76b2b67402598.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee56ee736a2.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6b250c263.jpg_d200.jpg");
        list.add("http://y.zdmimg.com/201509/08/55ee754a22211804.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee5ef7d1379.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee5c9a98eb9.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee75cf414888161.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee56c049c0d.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee5c3f9cf24.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee5c6f3ae3a.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7e21a752e7273.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee608270a1f.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee79a41818e.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7a4e07f3f.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee79125c592.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7b2fcc3bf3950.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee706f4b313.jpg_d200.jpg");
        list.add("http://y.zdmimg.com/201509/08/55ee7b2c047af3821.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7c6f27e7d8640.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee92b669e756330.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7dec5b0ec7524.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6b0a1d711.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7b03b9278.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6132bbf40.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee78175224b.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6349d301d.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6e4fc6ea3.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee79a31bf0850.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee785e28145.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee79c432a109259.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6f00a08d2.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6a4faa013.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee81d96cbad8062.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7a83b30cd.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6f65a5951.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee75496f62d.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee62c0b5169.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee5a9d72e12.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee77a18f2fe.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee77a873aef.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7f6e312ef8246.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6530bdd9d.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7f7b543b8103.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee714cd41dc.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7ee306868.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee5168708fa.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6458261f4.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7ecf72728186.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee59fc06b84.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7dcb852d28792.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee69a657606.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7a5422a7b.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee87dfde4308497.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7b363e861.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7fd328dde.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee87457f3699073.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee86a26cd104681.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7e4e72938.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee7f969e74e.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee84d70a822779.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee84c3d20604695.png_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee65e902d6e.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee817a83b8b.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee83b3e26902687.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/05/55ea48ec3d917.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee5fa77fd15.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee750fc70f1.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee700df0aed.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/07/55ed92b1c5f7d.jpg_d200.jpg");
        list.add("http://ym.zdmimg.com/201509/08/55ee6d69d4602.jpg_d200.jpg");
    }

}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 // 通用的ViewHoder,防止内存移除使用,比通常优化的ViewHolder更实用,用集合<View> 来代替多个成员变量 ,然后用同一个方法传入不同的id,来拿到需要的小控件

public class CommonViewHolder {
    public final View convertView;
    private Map<Integer, View> views = new HashMap<>();
    private CommonViewHolder(View convertView) {
        this.convertView = convertView;
    }
    public static CommonViewHolder createCVH(View convertView, ViewGroup parent, int layoutRes) {
        if (convertView == null) {
            LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
            convertView = layoutInflater.inflate(layoutRes, parent, false);
            CommonViewHolder cvh = new CommonViewHolder(convertView);
            convertView.setTag(cvh);
        }
        //            SingleNews singleNews = mNewsInListView.get(position);
        CommonViewHolder cvh = (CommonViewHolder) convertView.getTag();
        return cvh;
    }
    //        public void putView(int id,View view){
//            views.put(id,view);
//        }
    public View getView(int id) {
        if (views.get(id) == null) {
            views.put(id, convertView.findViewById(id));
        }
        return views.get(id);
    }
       //获取Tv类型控件
    public TextView getTv(int id) {
        return ((TextView) getView(id));
    }
       //获取iv类型控件
    public ImageView getIv(int id) {
        return ((ImageView) getView(id));
    }
}


1
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:380次
    • 积分:43
    • 等级:
    • 排名:千里之外
    • 原创:4篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章存档
    最新评论