加快图像下载时间

时间:2013-10-24 15:44:59

标签: java android image performance

在我的应用程序中我正在下载从URL获取的图像。这里的问题是它需要太长时间。图像被压缩,只有9公里大。我正在下载50个,所以让我们说应用程序正在下载500kByte的图像。这应该很快,对吗?嗯,事实并非如此。我有时会在加载之前等待20秒。什么花了那么久?我有一个非常简单的方法来下载图像。这是

int downloadingImages = getDownloadImageCount();
        System.out.println(downloadingImages);
        if(downloadingImages == 0){
            for(int c = downloadingImages; c < 50; c++){
                try{                    

                        bitmapArr[c]        = getBitmapFromURL(imageURLArr[c]);
                        setDownloadImageCount(50);
                        publishProgress(c);
                    } catch (FileNotFoundException f1){
                        Log.v("FileNotFoundException", "Bitmap konnte nicht geladen werden");
                } catch(NullPointerException e){

                } catch (IllegalStateException ie){

                } 
                setDownloadImageCount(50);
            }
        }

这是getBitmapFromUrl函数

public static Bitmap getBitmapFromURL(String src) throws FileNotFoundException {
    try {
        //Downloading the image
        URL url = new URL(src);
        HttpURLConnection connection = (HttpURLConnection) url.openConnection();
        connection.setDoInput(true);
        connection.connect();
        try{
            //Saving the image to a bitmap and return it
            InputStream input = connection.getInputStream();
            Bitmap myBitmap = BitmapFactory.decodeStream(input);
            return myBitmap;
            //Catch Exception if file not found
        } catch(FileNotFoundException ffe){
            Log.v("FileNotFoundException", "getBitmapFromURLMethod");
            return null;
        }        
        //Catch Exception if error at input and output
    } catch (IOException e) {
        e.printStackTrace();
        return null;
    } 
}

我的意思是,那里花了那么久?我怎样才能提高速度。我稍后会使用cahing图像,但仍然...我的意思是它是500kbs并且需要很长时间。那是为什么?

3 个答案:

答案 0 :(得分:2)

它完全自然需要一段时间。对于每个图像,您从URL加载一个新的HTTP请求(即请求被发送到服务器并响应)。

这是网络上往返时间的50倍(甚至不包括服务器响应的时间)。检索后,您应该在本地缓存图像。

答案 1 :(得分:2)

此过程中最长的一步可能是向服务器发送请求并等待它响应,并且您将重复此步骤50次。你有能力修改服务器吗?如果是这样,请考虑添加一个动作,让您一次下载所有50个图像(可能将它们放入zip文件,然后在客户端解压缩。)

答案 2 :(得分:0)

尝试将InputStream包装到BufferedInputStream

BufferedInputStream bs = new BufferedInputStream(input);
Bitmap myBitmap = BitmapFactory.decodeStream(input);