使用LRUCACHE解决加载本地大量图片卡顿及OOM问题

本文介绍了如何通过LRUCache解决Android应用在加载大量本地图片时遇到的卡顿和内存溢出(OOM)问题。通过在适配器中使用LRUCache缓存图片,减少对文件的频繁读取,从而提高性能和用户体验。
摘要由CSDN通过智能技术生成
今天测试了一下之前写的一个从本地加载图片并显示的功能,因为以前测试的时候一次性显示的图片比较少,所以就没发现有卡顿以及进入界面比较慢的问题,但是今天想看一下传入很多图片之后的界面效果,所以就加载了很多图片,传入图片之后一开始进入界面,发现出错,出错运用是因为我往Adapter里面传的参数有一项是ArrayList<Bitmap>,因为一次性传入太多的BitMap,所以越界了,导致程序崩溃,然后改成传路径,这个问题得到解决,但是又发现进入界面的时候特别慢,而且往下滑动的时候也是特别的卡顿,我在重写Adapter的时候用到了优化,但是还是特别卡顿,然后想到我每加载一张图片都是去根据路径去读文件,所以导致卡顿现象特别严重,而且进入的时候也是因为每张图片都去读一下文件,所以进入特别慢,有时候甚至出现OOM的问题。这时突然间感觉自己以前写的时候脑子估计是抽风了,竟然犯了这么弱智的问题,每次读文件是很耗时的,所以程序不崩溃才怪。因此感觉使用缓存的技术来修改自己的程序。因为这次又用到了LruCache技术,所以顺便写一下使用过程吧。
其实方法跟网上大部分讲解的代码都类似,只是把从网络下载图片部分改成从本地加载,而且因为这个程序的特殊性,所以加载的图片不能有相同路径的图片,因为所有的键值对设置我都是以图片的路径做的,所以如果路径相同的话有可能会使图片显示不出来。
public class WineListAdapter extends BaseAdapter implements AbsListView.OnScrollListener {

    // 从本地加载图片的线程集合
    private List<ImageDownloadTask> mDownloadTaskList;
    private LruCache<String, Bitmap> mLruCache;
    // 引用外部的变量
    private WeakReference<GridView> mGridView;
    private WeakReference<List<String>> urls;
    private WeakReference<List<String>> names;
    private WeakReference<Context> mContext;

    // 可见项的第一项的index
    private int mFirstVisibleIndex;

    // 可见项的个数
    private int mVisibleItemCount;

    // 是不是第一次打开Activity
    private boolean isFirstOpen = true;


    public WineListAdapter(Context context, GridView mGridView, List<String> urls, List<String> names) {
        this.mContext = new WeakReference<Context>(con
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值