我正面临毕加索无法快速加载图片的问题。
有3 ImageViews
显示左,中,右图像。
在快进/快退时,对于给定的时间点,选择左侧,中间和右侧并显示在三个框中。
这是初始化。 OkHttp
缓存为100MB,另有99MB LruCache
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
选项也已启用。
毕加索统计数据的命中率非常低。三千分之一百五十○。
图像以
的形式加载picasso.load(leftUrl)
.noFade()
.noPlaceholder()
.into(leftImageView);
picasso.load(middleUrl)
.noFade()
.noPlaceholder()
.into(middleImageView);
picasso.load(rightUrl)
.noFade()
.noPlaceholder()
.into(rightImageView);
问题1 - >毕加索花了几分钟下载3000多张图片。图像在其他平台上的加载速度足够快,并且有足够的带宽(高到足以传输4K)
问题2 - >即使在让毕加索花费自己的时间并完成加载所有图像之后,它仍然会冻结。绿色的是快的,蓝色的是慢的,然后是蓝色的冻结。
PS:据我所知,“膨胀”的图像尺寸会大得多,很容易超过99MB的范围。这就是为什么只有一些是绿色的,而大多数是蓝色的。答案 0 :(得分:0)
我能理解你的问题的唯一原因是你使用的是非常高分辨率和大尺寸的图像。 我的建议是在加载图像时调整图像大小。 这样的事情:
Picasso.with(getApplicationContext()).load(filePath).resize(400,400).centerCrop().into(imageView);
希望这会有所帮助!
答案 1 :(得分:0)
尝试使用其他图片加载库?也许这个缺陷只与毕加索有关。我个人从未喜欢过毕加索,因为它总是有一些问题。我已经开始使用Glide了,并且找不到一件坏事。它支持各种缓存和转换,并且非常好。
示例:
- 滑翔
- UniversalImageLoader
- 壁画