Android 通用图像加载器缓慢加载图像

Android 通用图像加载器缓慢加载图像,android,performance,gridview,Android,Performance,Gridview,首先,我在这里尝试了所有的解决方案,但都不好 我有一个gridview,有382张来自Universal Image Loader的图像。我尝试在没有UIL的情况下使用ViewHolder,并且图像加载很快,但gridview的滚动速度太慢 当我将UIL应用于滚动时,速度很快,但图像加载太慢 有人能帮我吗 创建()时执行的config()方法: private void config(){ config = new ImageLoaderConfiguration.Builder(thi

首先,我在这里尝试了所有的解决方案,但都不好

我有一个gridview,有382张来自Universal Image Loader的图像。我尝试在没有UIL的情况下使用ViewHolder,并且图像加载很快,但gridview的滚动速度太慢

当我将UIL应用于滚动时,速度很快,但图像加载太慢

有人能帮我吗

创建()时执行的config()方法:

private void config(){
    config = new ImageLoaderConfiguration.Builder(this.mContext.getApplicationContext())
    .memoryCacheSize(41943040)
    .discCacheSize(104857600)
    .threadPoolSize(6)//10
    .build();
    this.imageLoader.init(config);

    DisplayImageOptions.Builder dB = new Builder();
    dB.cacheOnDisc();
    try{
        dB.showStubImage(R.drawable.onloading);
    }catch(Exception e){            
        dB.showImageOnLoading(R.drawable.onloading);
    }
    dB.showImageForEmptyUri(R.drawable.onloadingerror); 
    dB.showImageOnFail(R.drawable.onloadingerror); 
    dB.bitmapConfig(Bitmap.Config.RGB_565);
    dB.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2);
    options = dB.build();
}
getView()方法:

@覆盖
公共视图getView(int位置、视图转换视图、视图组父视图){
视窗座;
//最终图像视图;
if(convertView==null){
holder=新的ViewHolder();
LayoutInflater vi=(LayoutInflater)this.mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
//imageView=(imageView)vi.充气(R.layout.element_grid,父项,false);
convertView=vi.充气(R.布局.元素网格,空);
holder.elemImg=(ImageView)convertView.findViewById(R.id.ImageGrid);
convertView.setTag(支架);
}否则{
//imageView=(imageView)convertView;
holder=(ViewHolder)convertView.getTag();
}
试一试{
this.imageLoader.displayImage(“drawable://”+Utils.getIntDrawableByName(this.coleccion.get(position).getImagen(),this.mContext),holder.elemImg,this.options,new ImageLoadingListener(){
发现布尔缓存;
@凌驾
public void onLoadingStarted(字符串imageUri,视图){
List memCache=MemoryCacheUtil.findCacheKeysForImageUri(imageUri,ImageLoader.getInstance().getMemoryCache());
cacheFound=!memCache.isEmpty();
如果(!cachefind){
文件discCache=DiscCacheUtil.findInCache(imageUri,ImageLoader.getInstance().getDiscCache());
if(discCache!=null){
cacheFound=discCache.exists();
}
}
}
@凌驾
public void onLoadingFailed(字符串imageUri、视图视图、故障原因){}
@凌驾
public void onLoadingComplete(字符串imageUri、视图视图、位图加载图像){
如果(找到缓存){
MemoryCacheUtil.removeFromCache(imageUri,ImageLoader.getInstance().getMemoryCache());
DiscCacheUtil.removeFromCache(imageUri,ImageLoader.getInstance().getDiscCache());
ImageLoader.getInstance().displayImage(imageUri,(ImageView)视图);
}
}
@凌驾
public void onLoadingCancelled(字符串imageUri,视图){}
});     
this.carta=this.coleccion.get(位置);
//this.nombreImgCarta=this.carta.getImagen();
//this.imageView.setImageResource(Utils.getIntDrawableByName(this.nombreImgCarta,this.mContext));
holder.elemImg.setScaleType(图像视图.刻度类型.中心裁剪);
//在网格视图中,你可以看到一个卡塔,你可以看到一个阿西纳多。
//这是我的家。
此参数为0.id;
if(this.mapIdsGrid.containsKey(this.carta.getId())){
this.id=this.mapIdsGrid.get(this.carta.getId());
}否则{
this.id=Utils.getRandomId(this.mContext);
this.mapIdsGrid.put(this.carta.getId(),this.id);
}
holder.elemImg.setId(此.id);
//在科尔沁省有争议的《宪章》侦探。

if(this.coleccionPersonal&&this.carta.getCantidad()使用Traceview确定您的时间花在哪里。我不知道如何使用Andoird Monitor,也不知道在调试监视器时冻结应用程序。我尝试了所有方法,我认为问题在于通用图像加载程序。知道吗?还有很多其他图像加载库:毕加索、Ion、SmartImageView等。请尝试另一个。但这些库只能从Internet加载,也可以从drawables加载?我只需要从drawables加载…因为我的gridview运行缓慢。。。。
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        //final ImageView imageView;
        if (convertView == null) {
            holder = new ViewHolder();
            LayoutInflater vi = (LayoutInflater) this.mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            //imageView = (ImageView) vi.inflate(R.layout.element_grid, parent, false);
            convertView = vi.inflate(R.layout.element_grid, null);

            holder.elemImg = (ImageView) convertView.findViewById(R.id.imagenGrid);
            convertView.setTag(holder);
        } else {
            //imageView = (ImageView) convertView;
            holder = (ViewHolder) convertView.getTag();
        }

        try {
            this.imageLoader.displayImage("drawable://"+Utils.getIntDrawableByName(this.coleccion.get(position).getImagen(), this.mContext), holder.elemImg, this.options,new ImageLoadingListener() {
                boolean cacheFound;
                @Override
                public void onLoadingStarted(String imageUri, View view) {
                    List<String> memCache = MemoryCacheUtil.findCacheKeysForImageUri(imageUri, ImageLoader.getInstance().getMemoryCache());
                    cacheFound = !memCache.isEmpty();
                    if (!cacheFound) {
                        File discCache = DiscCacheUtil.findInCache(imageUri, ImageLoader.getInstance().getDiscCache());
                        if (discCache != null) {
                            cacheFound = discCache.exists();
                        }
                    }
                }
                @Override
                public void onLoadingFailed(String imageUri, View view, FailReason failReason) {}
                @Override
                public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                    if (cacheFound) {
                        MemoryCacheUtil.removeFromCache(imageUri, ImageLoader.getInstance().getMemoryCache());
                        DiscCacheUtil.removeFromCache(imageUri, ImageLoader.getInstance().getDiscCache());

                        ImageLoader.getInstance().displayImage(imageUri, (ImageView) view);
                    }
                }
                @Override
                public void onLoadingCancelled(String imageUri, View view) {}
            });     

            this.carta = this.coleccion.get(position);
           // this.nombreImgCarta = this.carta.getImagen();
           // this.imageView.setImageResource(Utils.getIntDrawableByName(this.nombreImgCarta, this.mContext));
            holder.elemImg.setScaleType(ImageView.ScaleType.CENTER_CROP);

            //Detectar si el view del grid, que corresponde a una carta, ya tiene un id asignado.
            //En tal caso se le asigna el mismo id.
            this.id = 0;
            if (this.mapIdsGrid.containsKey(this.carta.getId())){
                this.id = this.mapIdsGrid.get(this.carta.getId());
            }else{
                this.id = Utils.getRandomId(this.mContext);
                this.mapIdsGrid.put(this.carta.getId(), this.id);
            }
            holder.elemImg.setId(this.id);

            //Detectar la trasparencia de la carta si hay cartas disponibles en la colección.
            if (this.coleccionPersonal && this.carta.getCantidad() <= 0){
                Utils.setAlphaForView(holder.elemImg, Constantes.VISIBLE_050);
            }

            //Métrica del Grid
            if (this.metrics == null){
                this.metrics = parent.getResources().getDisplayMetrics();
                this.hCarta = holder.elemImg.getDrawable().getMinimumHeight();
                this.wCarta = holder.elemImg.getDrawable().getMinimumWidth();
                this.cartaWFinal = (this.metrics.widthPixels / this.modificarCantidadColumnas) - MARGEN_CARTA;
                this.proporcion = this.cartaWFinal.doubleValue() / this.wCarta.doubleValue();
                this.cartaHFinal = (int) (this.hCarta * this.proporcion);
                this.gridView = new GridView.LayoutParams(this.cartaWFinal, this.cartaHFinal);
            }
            holder.elemImg.setLayoutParams(this.gridView);


        } catch (Exception e) {
            Utils.logErrorStart(log, "AdapterImage");
            Utils.logErrorIni(this.log, "getView");
            Utils.appendLog(this.log, e, null);
        }
        holder.elemImg.setImageDrawable(parent.getResources().getDrawable(Utils.getIntDrawableByName(this.coleccion.get(position).getImagen(), this.mContext)));
        return convertView;
    }