图像浏览器android,无法加载太多图像

时间:2013-06-16 10:37:02

标签: android bitmap

我正在尝试创建一个图片浏览器,但是当有太多图片需要加载时我会出错

这是我的代码(位图在第100行使用): http://pastebin.com/NidnH57b

如果尝试访问包含大量图像的目录,则会出错。

是否有加载大量图片的解决方案?

由于

3 个答案:

答案 0 :(得分:1)

我认为在活动开始时加载所需的所有图像并不是一个好习惯。例如,列表视图仅加载将在适配器中显示的图像。 Yo应该在arraylist中获取所需的所有信息并使用arrayAdapter作为示例,它将销毁并重新创建所需的视图以节省内存。

可以找到一种简单的方法here

答案 1 :(得分:0)

使用MediaStore来获取通过文件迭代的所有设备图像非常慢。你可以这样得到它们:

Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
    String[] projection = { MediaStore.Images.Media._ID, MediaStore.Images.Media.DATA,
            MediaStore.Images.Media.BUCKET_ID };
    String selection = MediaStore.Images.Media.BUCKET_ID + " = " + mAlbumId; //to get from specified folder
    Cursor cursor = getContentResolver().query(uri, projection, selection, null, null);

    while (cursor.moveToNext()) {
        Picture picture = new Picture();
        int columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
        picture.path = cursor.getString(columnIndex);

        columnIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
        picture.id = cursor.getLong(columnIndex);

        columnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_ID);
        picture.bucketId = cursor.getString(columnIndex);

        mAvailableImages.add(picture);
    }
    cursor.close();

然后使用自定义适配器在ListView中使用检索到的数据并编写您自己的ImageManager,它将为您创建和管理位图。

您可以阅读thisthis主题。

另请参阅Android原生图库http://viralpatel.net/blogs/pick-image-from-galary-android-app/

答案 2 :(得分:0)

访问目录时,不应预加载所有图像。相反,您应该在适配器的getView中加载图像(异步)。此外,您可能希望根据分辨率缩小图像,而不是使用inSampleSize的固定值。该网站可能会对您有所帮助:http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

顺便说一下。你还应该看一下ViewHolder - 模式(例如这里http://www.jmanzano.es/blog/?p=166)。