【问题标题】:Should I stagger a large number of image load calls?我应该错开大量的图像加载调用吗?
【发布时间】:2014-06-03 14:21:14
【问题描述】:

我有一个包含约 100 个大图像的 ListView。每张图像约为 640.640 jpg,显示为 1/2 屏幕大小。典型的画廊。

我目前正在使用美妙的 Universal-image-loader-1.9.2 加载图像。

ParseFile photoFile = p.getParseFile("imageFile");
ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.displayImage( photoFile.getUrl(), theImageView );

现在,当 ListView 加载时,您会感到有点卡顿。

现在,巧合的是,我的手机在一个非常慢的 WiFi 网络上。事实上,它就像丝绸一样光滑。

起初,我不明白为什么突然好转!巧合!

事实上,在这种情况下:是否值得错开调用来加载图像?

例如,我可以在每次通话之间留 0.1"。

或者说真的,我应该一个接一个地做吗?!

那里有什么交易? 所有 android 工程师都一直这样做吗?干杯!

我已经应用了我在谷歌上搜索到的所有其他经典技术来实现流畅的 ListView 滚动。干杯

(请注意,我已经尝试了许多系统来加载图像,但没有什么不同,这不是 Universal Image Loader 的问题,它会摇摆不定。)


ashishduh,这是来自 getView 的代码……如您所见,这很简单。

(注意 - 设置大小没有区别。如果我用固定的 500.500 尝试它,它是一样的)

...
v.someTextView.setText(blah);
v.someTextView.setText(blah);

// and now the big image
if (p.containsKey("imageFile"))
    {
    // this cell has a big image

    v.mainImage.setVisibility(View.VISIBLE);
    ParseFile photoFile = p.getParseFile("imageFile");

    // ...using p.getNumber("imageWidth").floatValue(); and height
    // from the cloud, calculate needed width/height on the phone...

    v.mainImage.getLayoutParams().width = Math.round(desiredGlassWidth);
    v.mainImage.getLayoutParams().height = Math.round(desiredGlassHeight);

    ImageLoader imageLoader = ImageLoader.getInstance();
    imageLoader.displayImage( photoFile.getUrl(), v.mainImage );
    }
else
    {
    // this pcell has no big image
    v.mainImageIV.setVisibility(View.GONE);
    }
...

【问题讨论】:

  • “现在,ListView 在加载时有点卡顿”——使用 Traceview 准确找出问题所在。
  • 你可以使用这个库来异步加载或下载文件,这对性能视图很有帮助code.google.com/p/android-query/#Image_Loading
  • wSakly - 也是一个令人难以置信的提示。 (应该是一个答案?)通用图像加载器是惊人的和真棒。但我注意到你引用的包声称 避免重复的同时提取如果是这样,也许就是这样。
  • 我对 UIL 不是很熟悉,但是如果真的是异步加载,应该是 0 卡顿。我使用了一个名为Picasso 的类似库,它具有数百个图像的网格视图,并且没有口吃。也许发布您的适配器getView 代码?
  • 我会投入 2 美分:对于图片库,我会使用 CoverFlow 之类的东西。显然,这并不能真正回答您的问题。但也许这个概念会给你一种不同的方法:总之,女士们,先生们……分页!换句话说,假设您一次加载 10 张图像。我想它会足够快。然后,通过按下一个按钮(因为您将 ListView 设计为有一个页脚,是吗?),加载接下来的 10 个。接下来的 10 个......一次又一次(真是个诗人!)。

标签: android listview android-imageview


【解决方案1】:

为了记录在这里谷歌搜索的任何人......

我刚刚尝试了 毕加索 ...根据评论中的建议(谢谢)

真的,太棒了。只有 Volley 会更好。

Picasso 工作得很好,我关于错开图像调用的问题毫无意义。

http://square.github.io/picasso/

希望对某人有所帮助!

如果有更好的答案,请在此处发布以获取积分!


PS1 重要的一点是Picasso 有一个“fetch”命令,这是一个预热。在某些情况下,您可以使用它来获得更好的结果。

正如我上面提到的PS2,显而易见的事实是唯一比毕加索更好的东西,就是转向Volley。希望它可以帮助某人。

【讨论】:

    猜你喜欢
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-06-15
    • 2018-03-27
    相关资源
    最近更新 更多