Android 通用图像加载器缓慢加载图像
首先,我在这里尝试了所有的解决方案,但都不好 我有一个gridview,有382张来自Universal Image Loader的图像。我尝试在没有UIL的情况下使用ViewHolder,并且图像加载很快,但gridview的滚动速度太慢 当我将UIL应用于滚动时,速度很快,但图像加载太慢 有人能帮我吗 创建()时执行的config()方法: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
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;
}