android – Lazy加载到ListView with Image. (光标适配器)

android – Lazy加载到ListView with Image. (光标适配器),第1张

概述我有一个列表视图显示视频与他们的缩略图,我正在使用光标适配器(使用ContentProvider的获取).问题是列表项增加列表视图的性能变得非常差.请让我知道最好的方法,使其懒惰加载. 新的: 最后我得到了一些解决方案.它的工作对我很好.如有任何建议,请通知我. 我的新代码在这里. (它使用堆栈与生产者消费者patern和bacground线程进行) @覆盖     public void bin 我有一个列表视图显示视频与他们的缩略图,我正在使用光标适配器(使用ContentProvIDer的获取).问题是列表项增加列表视图的性能变得非常差.请让我知道最好的方法,使其懒惰加载.

新的:
最后我得到了一些解决方案.它的工作对我很好.如有任何建议,请通知我.
我的新代码在这里. (它使用堆栈与生产者消费者patern和bacground线程进行)

@覆盖
public voID bindVIEw(VIEw vIEw,Context context,Cursor cursor){

VIEwHolder holder = (VIEwHolder) vIEw.getTag();    String name = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.VIDeo.Media.Title));    int ID = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.VIDeo.Media._ID));    holder.getIDVIEw().setText(name);    holder.getThumbVIEw().setTag((Integer)ID);    if(LazyLoader.getInstance().containsKey(ID)) {        Object bitmap = LazyLoader.getInstance().getBitMap(ID);        if(null != bitmap && (bitmap instanceof  Bitmap)) {            holder.getThumbVIEw().setimageBitmap((Bitmap)bitmap);        } else {            holder.getThumbVIEw().setimageDrawable(null);        }    } else {        holder.getThumbVIEw().setimageDrawable(null);        LazyItem lazyItem = new LazyItem();        lazyItem.setID(ID);        lazyItem.setthumbnail(holder.getThumbVIEw());        LazyLoader.getInstance().putItem(lazyItem);    }}public class LazyLoaderHelper extends Thread {    private ContentResolver resolver = null;    private Activity activity;    private boolean isActive = true;    ExecutorService executor;    public LazyLoaderHelper(Activity _activity,ContentResolver _resolver) {        resolver = _resolver;        activity = _activity;        isActive = true;        executor = Executors.newFixedThreadPool(10);    }    public voID stopThread() {        isActive = false;        executor.shutdown();    }    @OverrIDe    public voID run() {        while (isActive) {            if(LazyLoader.getInstance().getSize() > 0) {                final  LazyItem lazyItem = LazyLoader.getInstance().getItem();                if(null != lazyItem) {                    executor.execute(new Runnable() {                        @OverrIDe                        public voID run() {                            BitmapFactory.Options options = new BitmapFactory.Options();                            options.inSampleSize = 1;                            if ((null != resolver) && (null != activity)) {                                final Bitmap thumb = MediaStore.VIDeo.thumbnails.getthumbnail(resolver,lazyItem.getID(),MediaStore.VIDeo.thumbnails.MICRO_KIND,options);                                if (null != thumb) {                                    LazyLoader.getInstance().putBitMap(lazyItem.getID(),thumb);                                } else {                                    LazyLoader.getInstance().putBitMap(lazyItem.getID(),new Object());                                }                                if ((Integer) lazyItem.getthumbnail().getTag() == lazyItem.getID()) {                                    activity.runOnUiThread(new Runnable() {                                        @OverrIDe                                        public voID run() {                                            if (null != thumb) {                                                lazyItem.getthumbnail().setimageBitmap(thumb);                                            } else {                                                lazyItem.getthumbnail().setimageDrawable(null);                                            }                                        }                                    });                                }                            }                        }                    });                }            }        }    }}
解决方法 您可以使用picaso库的AndroID它是开源的,可以轻松地与您的应用程序集成,您可以从github从下面的链接下载库

http://square.github.io/picasso/

并且可以通过在列表视图适配器中使用以下方法轻松实现延迟加载

毕加索支持下载和错误占位符作为可选功能.

Picasso.with(上下文)
.load(URL)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)
.into(ImageVIEw的);

所有资源,资产,文件,内容提供商都被作为图像来源.

Picasso.with(上下文).load(R.drawable.landing_screen).into(imageVIEw1);Picasso.with(上下文).load( “文件:///androID_asset/DvpvklR.png”).into(imageVIEw2);Picasso.with(context).load(new file(…)).into(imageVIEw3);

总结

以上是内存溢出为你收集整理的android – Lazy加载到ListView with Image. (光标适配器)全部内容,希望文章能够帮你解决android – Lazy加载到ListView with Image. (光标适配器)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1133163.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存