3

私のlistViewはテキストだけで非常にスムーズに実行されますが、サムネイルを(キャッシュからでも)ロードしようとするとすぐに、途切れ途切れに実行されます。

UniversalImageLoaderスクリプトを使用しています

メソッド内の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/...

私はSamsungGalaxyNexusでテストしており、Android 4.0.4を実行しています(ただし、minSdkVersion = "8")

4

2 に答える 2

9

ImageLoaderConfiguration config、DisplayImageOptions imgDisplayOptions、ImageLoader imageLoaderのインスタンス化を、アダプタークラスのプライベートフィールド/メンバーとしてgetViewメソッドの外部に配置します。getViewが呼び出されるたびにではなく、これらのものを1回だけ作成する必要があります。

編集:Adapterクラス全体を見ずに、ここで私が言っていることを突き刺します。私はそれがあなたが持っているものに近く、あなたがそれをうまくいくようにすることができることを願っています。レムはどちらの方法でも知っています。

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
        }
    }

}
于 2012-08-23T20:27:44.870 に答える
2

間違っているかもしれませんが、この問題に直面したとき、小さいサイズの画像を使用すると速度が大幅に向上することに気付きました。以前は150KB以上の画像を使用していましたが、約10枚に切り替えたところ、問題なく機能しました。上記の一連の考え方に追加するだけで、後で最適化するのに役立つ場合があります。

于 2015-02-11T17:47:03.847 に答える