【问题标题】:Picasso unable to rapidly load images毕加索无法快速加载图像
【发布时间】:2017-05-11 21:12:55
【问题描述】:

我遇到了毕加索无法快速加载图像的问题。

共有 3 个ImageViews,分别显示左、中、右图像。 在快进/快退时,对于给定的时间点,左、中和右被选择并显示在三个框中。

这里是初始化。 OkHttp 缓存为 100MB,LruCache 为 99MB

new Picasso.Builder(getApplicationContext())
                .downloader(new OkHttp3Downloader(picassoOkHttpClient))
                .memoryCache(new LruCache(99999999))
                .build();

窗口移动的图像数量为 3000+。所以我将图像预加载为

picasso.load(imageUrl).fetch();

平均图像大小为 10KB - 320x180,因此它等于 35MB,小于 99MB LruCache

当快速循环工作时,许多图像是GREEN(来自MEMORY)和BLUE(来自DISK),但是在几个快速循环之后,这3个图像冻结或变得非常慢。此时大部分图片都是BLUE。应用程序仍在响应。没有 OutOfMemory 或任何其他异常。

android:largeHeap 选项也已启用。

毕加索统计数据中的命中率非常低。 150/3000。

图片被加载为

picasso.load(leftUrl)
.noFade()
.noPlaceholder()
.into(leftImageView);

picasso.load(middleUrl)
.noFade()
.noPlaceholder()
.into(middleImageView);

picasso.load(rightUrl)
.noFade()
.noPlaceholder()
.into(rightImageView);

问题 1 -> Picasso 需要几分钟才能下载 3000 多张图片。图像在其他平台上的加载速度足够快,并且带宽充足(足以流式传输 4K)

问题 2 -> 即使让毕加索自己花时间完成所有图像的加载,它仍然会冻结。绿色的快,蓝色的慢,然后蓝色的冻结。

PS:我知道“膨胀”的图像尺寸会大得多,并且很容易超过 99MB 的界限。这就是为什么只有一些是绿色的,而大多数是蓝色的。

【问题讨论】:

    标签: android image performance picasso largenumber


    【解决方案1】:

    我能理解您的问题的唯一原因是您使用的图像分辨率非常高且尺寸很大。 我对您的建议是在加载这些图像时调整图像大小。 类似的东西:

    Picasso.with(getApplicationContext()).load(filePath).resize(400,400).centerCrop().into(imageView);
    

    希望这会有所帮助!

    【讨论】:

    • 其实图片都是JPG格式的,压缩的比较多。 320x180 图像为 10KB。即使只有一半的图像数量(1500 张),性能也很糟糕。
    • 尝试使用 resize(320, 180) 但没有显着差异。
    • 一次加载 3000 张图片?
    • 是的。他们必须是。网络瓶颈可能会严重影响显示,导致图像被跳过。如果要求 Picasso 加载得太快,甚至磁盘检索也会受到影响。任何小于 500 毫秒的时间都会导致从磁盘加载时速度变慢(蓝色指示灯)
    • 你为什么不一步一步加载它们,像一个接一个。否则你将面临这个问题。我不知道你的项目要求。但我可以建议将图像分块加载,而不是一起加载。让我们加载第一个图像,然后加载第二个图像,或者加载前 100 个图像,然后加载 100 个图像,然后再加载下一个 100 个图像。检查这个:stackoverflow.com/questions/26548660/… 在 "OnSuccess()" 方法中设置你的条件来检查位置是否为 100 或其他东西。
    【解决方案2】:

    尝试使用其他图像加载库?也许缺陷只是毕加索。就我个人而言,我从来没有喜欢过毕加索,因为它总是有一些问题。我已经开始使用 Glide,但找不到任何不好的地方。它支持各种缓存和转换,而且做得非常好。

    示例:
    - 滑行
    - UniversalImageLoader
    - 壁画

    【讨论】:

    • 谢谢。出于无奈,我一直在考虑。我只是想排除毕加索的所有可能性。仍然用头撞它,但没有解决办法。
    • 虽然 Glide 并没有完全解决我的问题,但至少比 Picasso 好很多,因为它使用了默认的 Bitmap 格式。使用相同/相似配置的方式更少的错过、跳过和冻结。即使强制 Picasso 使用 Glide 的默认格式 RGB_555,它仍然没有那么快。
    猜你喜欢
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2016-12-12
    • 1970-01-01
    相关资源
    最近更新 更多