【发布时间】: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