在我的Android Activity
中,我想要显示来自网络的大约10张图片。通常,我必须创建10 ImageView
来显示每个图像,但ImageView
可能会导致Out of memory exception
。所以我决定使用10 WebView
来显示图像。它运作得很好。
但是我不知道WebView
的性能如何,任何人都可以告诉我10 WebViews
的性能如何?我可以使用这种方法来显示图像吗?
答案 0 :(得分:2)
WebView在内存和图像视图中占用更多空间。只需显示图像,就无法在webView中进行适当的缩放。 Webview可以更快地将图像弹出到Ui,但这不是有效的方式。
您可以尝试使用Volly,它具有用于图像下载,缓存和缩放的构建工具,我也可以为您提供相当快速的保证。
您需要做的就是将Volley库添加到项目中,并使用com.android.volley.toolbox.NetworkImageView替换XML布局中的ImageView。
将以下变量添加到Activity类:
private RequestQueue mRequestQueue;
private ImageLoader mImageLoader;
Create the objects in the onCreate() method of your Activity:
mRequestQueue = Volley.newRequestQueue(context);
mImageLoader = new ImageLoader(mRequestQueue, new ImageLoader.ImageCache() {
private final LruCache<String, Bitmap> mCache = new LruCache<String, Bitmap>(10);
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
});
然后下载适配器类的getView()方法的图像:
NetworkImageView image = (NetworkImageView)view.findViewById(R.id.image);
image.setImageUrl("http://someurl.com/someimage.png",mImageLoader);
在生产代码中,您将使用RequestQueue和ImageLoader类的全局实例,并且您的onCreate()方法不会像在此玩具示例中那样混乱。
我不会使用webview来显示图像,当然可以这样做。如果你真的想看看哪种方式“更快”,你可以尝试使用ImageView,NetworkImageView和WebView加载一个大图像,并使用System.nanoTime()方法进行粗略的时间估计。
答案 1 :(得分:0)
您是否同时显示10张图片?
如果是,则图像视图的大小必须相对较小,因此您可以使用小版本的图像并避免内存不足错误(或下载实际大小但在内存中创建小版本)。
如果没有,您应该使用ListView或GridView或ViewPager或回收视图的东西。您只能同时在内存中获取其中几个并避免内存不足错误。
此外,还有优秀的库来显示下载和显示图像,例如Universal Image Loader将在后台执行所有操作,将图像大小调整为所需大小,您可以激活内存缓存/磁盘缓存等。