![](/img/trans.png)
[英]Listview reloading already loaded images using Universal image loader
[英]ListView VERY slow when images are loaded (using Universal Image Loader)
我的listView只用文本運行非常流暢 - 但是一旦我嘗試加載縮略圖(甚至從緩存中),它就會運行SOO波動。
我的ArticleEntryAdapter中的代碼在public View getView(...)
方法中:
/**
* PHOTOS
*/
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.mContext)
.enableLogging()
.memoryCacheSize(41943040)
.discCacheSize(104857600)
.threadPoolSize(10)
.build();
DisplayImageOptions imgDisplayOptions = new DisplayImageOptions.Builder()
//.showStubImage(R.drawable.stub_image)
.cacheInMemory()
.cacheOnDisc()
//.imageScaleType(ImageScaleType.EXACT)
.build();
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(config);
//loads image (or hides image area)
imageLoader.displayImage("", viewHolder.thumbView); //clears previous one
if(article.photopath != null && article.photopath.length() != 0)
{
imageLoader.displayImage(
"http://img.mysite.com/processes/resize_android.php?image=" + article.photopath + "&size=150&quality=80",
viewHolder.thumbView,
imgDisplayOptions
);
viewHolder.thumbView.setVisibility(View.VISIBLE);
}
else
{
viewHolder.thumbView.setVisibility(View.GONE); //hide image
viewHolder.thumbView.invalidate(); //should call after changing to GONE
}
Logcat顯示它正在從緩存中加載圖像(我認為):
ImageLoader Load image from memory cache [http://img.mysite.com/processes/...
我正在我的三星Galaxy Nexus上測試它並運行Android 4.0.4(雖然我的minSdkVersion =“8”)
將您的getView方法之外的ImageLoaderConfiguration配置,DisplayImageOptions imgDisplayOptions,ImageLoader imageLoader的瞬間作為Adapter類的私有字段/成員。 你應該只創建一次這些東西,而不是每次調用getView。
編輯:沒有看到你的整個Adapter類,這里是我正在說的東西。 我希望它接近你擁有的東西,你可以使它成功。 Lemme知道任何一種方式。
public class MyAdapterClass extends BaseAdapter {
/**
* PHOTOS
*/
static ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this.mContext)
.enableLogging()
.memoryCacheSize(41943040)
.discCacheSize(104857600)
.threadPoolSize(10)
.build();
static DisplayImageOptions imgDisplayOptions = new DisplayImageOptions.Builder()
//.showStubImage(R.drawable.stub_image)
.cacheInMemory()
.cacheOnDisc()
//.imageScaleType(ImageScaleType.EXACT)
.build();
static ImageLoader imageLoader = ImageLoader.getInstance();
/**
*
*/
public MyAdapterClass() {
// TODO Auto-generated constructor stub
imageLoader.init(config);
}
/* (non-Javadoc)
* @see android.widget.Adapter#getCount()
*/
public int getCount() {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see android.widget.Adapter#getItem(int)
*/
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
}
/* (non-Javadoc)
* @see android.widget.Adapter#getItemId(int)
*/
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
/* (non-Javadoc)
* @see android.widget.Adapter#getView(int, android.view.View, android.view.ViewGroup)
*/
public View getView(int position, View convertView, ViewGroup parent) {
//loads image (or hides image area)
imageLoader.displayImage("", viewHolder.thumbView); //clears previous one
if(article.photopath != null && article.photopath.length() != 0)
{
imageLoader.displayImage(
"http://img.mysite.com/processes/resize_android.php?image=" + article.photopath + "&size=150&quality=80",
viewHolder.thumbView,
imgDisplayOptions
);
viewHolder.thumbView.setVisibility(View.VISIBLE);
}
else
{
viewHolder.thumbView.setVisibility(View.GONE); //hide image
viewHolder.thumbView.invalidate(); //should call after changing to GONE
}
}
}
我可能錯了,但是當我遇到這個問題時,我發現使用較小尺寸的圖像會極大地提高速度。 之前我使用的圖像數量超過150KB,我將它們切換成大約10個,並且效果非常好。 只是加入上述思路,可能會在以后進行優化時派上用場。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.