Java 将图像缩略图加载到网格中的最快方法

Java 将图像缩略图加载到网格中的最快方法,java,android,performance,Java,Android,Performance,我正在尝试显示一个包含所有用户图像的gridview 但是从android MediaStore加载图像 我必须做一个请求,然后从结果的图像循环得到每一个缩略图,这导致了一个巨大的滞后 我如何将这些调用压缩成一个请求,或者如何在这方面节省更多时间 String[] projection = new String[]{ MediaStore.Images.Media._ID, MediaStore.Images.Media.TITLE,

我正在尝试显示一个包含所有用户图像的gridview

但是从android MediaStore加载图像

我必须做一个请求,然后从结果的图像循环得到每一个缩略图,这导致了一个巨大的滞后

我如何将这些调用压缩成一个请求,或者如何在这方面节省更多时间

 String[] projection = new String[]{
            MediaStore.Images.Media._ID,
            MediaStore.Images.Media.TITLE,
            MediaStore.Images.Media.DATA,
            MediaStore.Images.Media.MIME_TYPE,
            MediaStore.Images.Media.SIZE,
            MediaStore.Images.Media.DATE_TAKEN,
            MediaStore.Images.Media.DATE_ADDED,
            MediaStore.Images.Media.DATE_MODIFIED,
            MediaStore.Images.Media.ORIENTATION
    };

    String sortOrder = MediaStore.Images.Media.DATE_ADDED + " DESC, " +
            MediaStore.Images.Media.DATE_MODIFIED + " DESC";

    ContentResolver cr = ctx.getContentResolver();
    final Cursor cursorImages = cr.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
            projection,
            null,
            null,
            sortOrder);

    ArrayList<ImageDataHolder> images = new ArrayList<ImageDataHolder>(cursorImages.getCount());

    if (cursorImages.moveToFirst()) {
        final int dataColumn = cursorImages.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        final int idColumn = cursorImages.getColumnIndexOrThrow(MediaStore.Images.Media._ID);

        do {

            final Long imageID = cursorImages.getLong(idColumn);
            final String imagePath = cursorImages.getString(dataColumn);
            final int imageOrientation = cursorImages.getInt(dataColumn);

            // create new cursor to get thumbnail path
            final Cursor cursorThumb = MediaStore.Images.Thumbnails.queryMiniThumbnail(ctx.getContentResolver(), imageID,
                    MediaStore.Images.Thumbnails.MINI_KIND, null);

            String thumbPath = "";
            if (cursorThumb != null) {
                if (cursorThumb.getCount() > 0) {
                    cursorThumb.moveToFirst();
                    thumbPath = cursorThumb.getString(cursorThumb.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
                }
                cursorThumb.close(); // cleanup crew, isle 7
            }

            // create new ImageDataHolder and add to images ArrayList
            // only if we have a thumbnail to show
            if (thumbPath != "")
                images.add(new ImageDataHolder(imagePath, thumbPath, imageID, imageOrientation));

        } while (cursorImages.moveToNext());
    }

    cursorImages.close();

    return images;
String[]投影=新字符串[]{
MediaStore.Images.Media.\u ID,
MediaStore.Images.Media.TITLE,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.MIME_类型,
MediaStore.Images.Media.SIZE,
MediaStore.Images.Media.DATE_拍摄,
MediaStore.Images.Media.DATE_已添加,
MediaStore.Images.Media.DATE_已修改,
MediaStore.Images.Media.ORIENTATION
};
字符串sortOrder=MediaStore.Images.Media.DATE_ADDED+“DESC,”+
MediaStore.Images.Media.DATE_MODIFIED+“DESC”;
ContentResolver cr=ctx.getContentResolver();
最终光标cursorImages=cr.query(MediaStore.Images.Media.EXTERNAL\u CONTENT\u URI,
投影,
无效的
无效的
分拣机);
ArrayList images=新的ArrayList(cursorImages.getCount());
if(cursorImages.moveToFirst()){
final int dataColumn=cursorImages.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
final int ID column=cursorImages.getColumnIndexOrThrow(MediaStore.Images.Media.\u ID);
做{
final Long imageID=cursorImages.getLong(idColumn);
最终字符串imagePath=cursorImages.getString(dataColumn);
final int imageOrientation=cursorImages.getInt(数据列);
//创建新光标以获取缩略图路径
最终光标cursorThumb=MediaStore.Images.Thumbnails.queryMiniThumbnail(ctx.getContentResolver(),imageID,
MediaStore.Images.Thumbnails.MINI_KIND,null);
字符串thumbPath=“”;
if(cursorThumb!=null){
if(cursorThumb.getCount()>0){
cursorThumb.moveToFirst();
thumbPath=cursorThumb.getString(cursorThumb.getColumnIndexOrThrow(MediaStore.Images.Thumbnails.DATA));
}
cursorThumb.close();//清理队,7号岛
}
//创建新的ImageDataHolder并添加到images ArrayList
//只有当我们有一个缩略图显示
如果(拇指路径!=“”)
添加(新的ImageDataHolder(imagePath、thumbPath、imageID、imageOrientation));
}while(cursorImages.moveToNext());
}
cursorImages.close();
返回图像;