在我正在开发的应用程序中,我想从URL下载图像(jpeg)并显示它。我到目前为止所使用的代码,但我不明白对于相同的图像,有时可能需要3秒才能解码,而另一个则需要200秒。这是我的代码:
String attachmentUrl = attachment.getContentSrc();
long mills = System.currentTimeMillis();
//Get the stream from the URL
InputStream is = new BufferedInputStream(new URL(attachmentUrl).openConnection().getInputStream());
is.mark(attachment.getFileSize());
Log.d("AttachmentsUtils","Downloading Time: "+((System.currentTimeMillis()-mills)/1000)+" secs");
mills = System.currentTimeMillis();
BitmapFactory.Options options = new BitmapFactory.Options();
//Now, we only want the size of the image
options.inJustDecodeBounds = true;
BitmapFactory.decodeStream(is, null, options);
//Calculate the sampleSize
options.inSampleSize = calculateInSampleSize(options, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT);
options.inJustDecodeBounds = false;
//Reset the stream in order to decode it again, but this time, we will get the bitmap
is.reset();
Bitmap bm = BitmapFactory.decodeStream(is, null, options);
Log.d("AttachmentsUtils","Decode Time: "+((System.currentTimeMillis()-mills)/1000)+" secs. With sample "+options.inSampleSize);
//Return an scaled version of the bitmap
if(bm!=null){
return Bitmap.createScaledBitmap(bm, THUMBNAIL_WIDTH, THUMBNAIL_HEIGHT, false);
}
我正在尝试使用多个图像,但最大的图像有1,332,828字节(1.3MB)和1536×2048像素。正如我之前所说,有时它会在3或5秒内解码,其他解码它需要很长时间。我总是使用相同的option.inSampleSize
。
之前我在另一个项目中使用了相同的代码,使用了更大的图像,并且工作正常。唯一不同的是我从文件而不是从URL检索inputStream,但我认为除了下载时间之外,这显然没有任何区别。
我已经检查过并且第一次解码获取文件的尺寸需要2或3秒,所以这不是问题。我正在测试Nexus 4,因此它与设备性能无关。我只是不知道为什么大多数时间需要这么长时间,而且有几次它工作正常。
感谢您的帮助!
答案 0 :(得分:0)
您是通过移动网络还是wifi进行下载。如果您使用3G,那么看到文件下载和处理所需的时间差异会让我感到惊讶。