【发布时间】:2014-07-31 11:21:40
【问题描述】:
我读到HttpUrlConnection 在建立连接时会发送 GET 请求。然后我可以检索InputStream 的实例来读取该资源。这是否意味着在建立连接时会下载整个资源文件?
我想要实现的是将ImageView 图像设置为来自网络的远程图像。但是我的想法是在memory-friendly way 中执行此操作,并为BitmapFactory 计算inSampleSize。为了计算该大小 - 我需要 view dimensions 和 remote image dimensions。可以通过这种方式检索远程图像尺寸(基本上它不应该将图像加载到内存中):
BitmapFactory.Options options = new BitmapFactory.Options ();
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream (inputStream, null, options);
但是一旦读取 inputStream 在这种情况下就不能被重用(或者可以吗?)。同样HttpUrlConnection 返回InputStream 的相同实例,这意味着如果我想read an image again(并且使用inSampleSize 选项仅加载我需要的大小) - 我必须re-connect。
我希望能够加载大图像,但是正如我所听说的 - HTTP 请求很慢,因此发送第二个请求是否值得?此外,即使我第一次只读取图像信息而不加载整个图像,我也不知道是否已经下载了整个图像。
如果不值得,我认为唯一的方法是将整个图像复制到内存中,获取它的尺寸,只读取我需要的大小,最后清理内存。女巫会在短时间内消耗大量内存。
【问题讨论】:
-
检查这个库square.github.io/picasso 它可以完成你解释的所有事情以及更多。
标签: android memory-management imageview httprequest bitmapfactory