我试图用自定义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);
答案 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'
}