2013-10-24 2 views
1

내 응용 프로그램에서 URL에서 가져 오는 이미지를 다운로드하고 있습니다. 여기서 문제는 너무 오래 걸린다는 것입니다. 이미지는 압축되고 단지 9km에 불과합니다. 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; 
    } 
} 

은 너무 오래 거기에 무엇을 취하고 무엇입니까? 어떻게 속도를 높일 수 있습니까? 나중에 카힐을 이미지에 사용 하겠지만, 여전히 ... 나는 500kbs이고 너무 오래 걸린다는 것을 의미합니다. 왜 그런가요?

+0

휠을 다시 시도하지 마십시오. http://square.github.io/picasso/ – Budius

+1

타임 라인을 여러 줄로 길게 입력하십시오. 이것은 너무 오래 걸리는 것을 알려줄 수 있습니다. 서버와 연결하는 것도 시간이 많이 소요되는 과정입니다. 따라서 연결 설정에 시간이 걸리거나 다운로드 중인지 확인하십시오. –

+0

유니버설 이미지 로더를 사용할 수도 있습니다. https://github.com/nostra13/Android-Universal-Image-Loader –

답변

2

완전히 자연스럽지 않습니다. 이미지를 URL에서로드하면 새 HTTP 요청이 만들어집니다 (즉, 요청이 서버로 전송되어 응답합니다).

네트워크를 통한 왕복 시간의 50 배입니다 (서버가 응답하는 데 걸리는 시간조차 포함하지 않음). 이미지를 가져 오면 로컬로 캐시해야합니다.

0

봅니다 과정에서 가장 긴 단계는 아마도 서버에 요청을 전송하고 응답을 기다리고, 당신은이 단계를 50 회 반복하고있다

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

BufferedInputStream을 위해의 InputStream을 포장합니다. 서버를 수정할 수 있습니까? 그렇다면 한 번에 50 개의 이미지를 모두 다운로드 할 수있는 액션을 추가하는 것을 고려해보십시오 (아마도 zip 파일에 넣은 다음 클라이언트 쪽을 푸는 것이 좋습니다).

+0

어떻게 처리되는지 알고 싶습니다. 나는 이것에 대해 들어 본 적이 없으며, 배우기에 사랑 스러울 것입니다. – Chud37

+0

이것은 솔루션에 대한 매우 높은 수준의 설명입니다. 이미지를 클라이언트 애플리케이션에 다운로드하는 경우 MVC 또는 유사한 아키텍처 서버 측 (Ruby on Rails, Asp.NET 등)을 사용하는 서버 클라이언트 아키텍처가있을 가능성이 높습니다. 서버에서 새 작업을 만들고, 타사 라이브러리를 사용하여 이미지를 zip 파일에 저장하고, zip 파일을 작업 결과로 보내고, 클라이언트의 타사 라이브러리를 사용하여 이미지 압축을 풀 것입니다. – Kevin

관련 문제