使用Picasso自定义显示图像Downloaded使用了大量内存

时间:2017-11-21 07:35:48

标签: android picasso expansion

我试图用自定义Picasso Downloader加载的图像填充RecyclerView项目,我注意到应用程序正在使用大量内存并且滚动不顺畅。图像从obb扩展zip文件加载。这是我的自定义下载:

public class VirtualTourDownloader implements Downloader {

    private final ZipResourceFile mZipResourceFile;
    private InputStream mInputStream;

    public VirtualTourDownloader(ZipResourceFile zipResourceFile) {
        mZipResourceFile = zipResourceFile;
    }

    @Override
    public Response load(Uri uri, int networkPolicy) throws IOException {
        String path = uri.getPath();
        String idStr = "virtual/" + path.substring(path.lastIndexOf('/') + 1);
        mInputStream = mZipResourceFile.getInputStream(idStr);
        return new Response(mInputStream, false, mInputStream.available());
    }

    @Override
    public void shutdown() {
        try {
            mInputStream.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Picasso with custom downloader

适配器内的

init

Picasso.Builder builder = new Picasso.Builder(mContext).downloader(new VirtualTourDownloader(expansionFile));
mPicasso = builder.build();

onBind将图像加载到ImageView

mPicasso.load(uri).into(image);

1 个答案:

答案 0 :(得分:0)

我认为你应该使用Glide库。

好处是: 1.它会消耗更少的内存。 2. Glide的默认位图格式设置为RGB_565,因此与Picasso相比,图像质量会更差。

3.Glide为每个尺寸创建缓存图像,而Picasso保存完整图像并对其进行处理。意味着如果您尝试将图像(500 x 500)加载到imageView(200 x 200)中。 Glide将下载完整图像,然后将其调整为200 x 200,然后它将缓存并加载到imageView中,而Picasso将下载完整图像,然后它将缓存完整图像,然后将其调整为200 x 200并将其加载到imageView中。

下次当您请求将相同图像(500 x 500)加载到imageView(100 x 100)时,Glide将再次下载完整图像(500 x 500),然后将其调整为100 x 100,然后缓存并加载到imageView 。与Glide不同,Picasso选取缓存的全尺寸图像并调整大小并将其加载到imageView(100 x 100)中。毕加索不会再次下载相同的图像。

此内容取自(http://tutorialwing.com/android-glide-library-tutorial-example/

使用Glide时,请在Gradle文件中添加此依赖项

dependencies {
    compile 'com.github.bumptech.glide:glide:3.7.0'
    compile 'com.android.support:support-v4:23.4.0'
}