2012-07-25 4 views
0

지금은 ListViews에 나열된 내부 메모리 비트 맵을 유지 관리하는 클래스가 있습니다.비트 맵을 저장하는 가장 좋은 방법

목록이 표시되면 반환 할 이미지의 이름을 알려주고 해당 비트 맵을받는 방법을 사용하십시오.

내부 메모리에서 이미지를 직접 목록보기로로드하면 필요한 모든 이미지를 메모리 (HashMap)에로드하면 프로세스가 오래 걸립니다.

나는보기의 재활용을 사용하고 있으며 각 항목에는 두 개와 두 개의 imageviews 텍스트 뷰가 있습니다. 그러나, scrooll은 매우 느리며 많은 지체가 있습니다.

이미지를 메모리에 저장하는 것이 좋습니다 (해시 맵). 목록의 시간에 메모리로 로딩하는 경우 더 느립니다. 이미지는 100x100 픽셀입니다.

내 질문은 : 지연 문제는 이미지가 모두 메모리에 있다는 사실과 관련이있을 수 있습니다. 가장 좋은 솔루션은 무엇입니까?

는 편집 : 나는 (목록에 간다) 스크롤 할 때마다

07-25 16:56:33.195: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.195: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.203: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.203: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.210: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.257: V/ADAPTER(8648): recicling view [16] 
07-25 16:56:33.265: V/ADAPTER(8648): recicling view [15] 
07-25 16:56:33.273: V/ADAPTER(8648): recicling view [14] 
07-25 16:56:33.281: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.289: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.296: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.296: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.304: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.312: V/ADAPTER(8648): recicling view [7] 
07-25 16:56:33.320: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.328: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.328: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.335: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.335: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.343: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.343: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.359: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.359: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.367: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.375: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.382: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.398: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.398: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.406: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.406: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.414: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.414: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.484: V/ADAPTER(8648): recicling view [13] 
07-25 16:56:33.492: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.500: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.500: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.507: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.515: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.523: V/ADAPTER(8648): recicling view [7] 
07-25 16:56:33.531: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.539: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.539: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.546: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.546: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.554: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.554: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.562: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.570: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.578: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.585: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.585: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.609: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.609: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.617: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.617: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.625: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.625: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.679: V/ADAPTER(8648): recicling view [12] 
07-25 16:56:33.687: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.695: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.695: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.703: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.703: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.710: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.710: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.718: V/ADAPTER(8648): recicling view [7] 
07-25 16:56:33.734: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.734: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.742: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.742: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.750: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.750: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.757: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.765: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.773: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.781: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.781: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.789: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.804: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.812: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.820: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.820: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.875: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.882: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.890: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.890: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.898: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.898: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.906: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.914: V/ADAPTER(8648): recicling view [7] 
07-25 16:56:33.929: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.929: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.937: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.937: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.945: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.953: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.953: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:33.968: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:33.976: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:33.984: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:33.984: V/ADAPTER(8648): recicling view [5] 
07-25 16:56:33.992: V/ADAPTER(8648): recicling view [6] 
07-25 16:56:34.007: V/ADAPTER(8648): recicling view [0] 
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [1] 
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [2] 
07-25 16:56:34.015: V/ADAPTER(8648): recicling view [3] 
07-25 16:56:34.023: V/ADAPTER(8648): recicling view [4] 
07-25 16:56:34.031: V/ADAPTER(8648): recicling view [5] 

는,이 출력을 얻을. 여기서 [] 내의 내용은 위치에 해당합니다. 그가 0-6이라는 포지션을 끊임없이 보여주고 있다는 것이 이상하지 않습니까?

EDIT 지금 가능한 이유를 발견했다.

저는 현재 필요한 모든보기가있는 tab_activity입니다. xml에 tab_activity top_bar가 추가되었습니다. 여기서 지속적으로 변경되는 이미지가 있습니다. 이미지가 자동 모드 (지속적으로 변경됨) 일 때 탭 내에있는 ListView는 "다시 그리기"되므로 지연됩니다.

나는 x 시간 동안 x의 이미지를 변경하는 서비스 (음악)를 사용하고 있습니다.

왜 이미지를 다시 볼 때 ListView를 다시 그릴 수 있습니까?

+0

를 수행 이미지가 큰 파일 크기가? 그리고 그들은 지원되는 최적화 된 형식입니까? .png 파일을 권장합니다. –

+0

fos = openFileOutput (name, Context.MODE_PRIVATE); bitmap.compress (CompressFormat.JPEG, 90, fos); JPEG를 사용하여 이미지를 저장합니다. 잘못 되었습니까? 그리고 내가 사용하는 : bitmap = BitmapFactory.decodeStream (fis); 내부 저장소에서 이미지를 가져 오는 중입니다. – marceloamx

답변

0

이미지 로딩이 지연을 일으키는 지 아직 확실하지 않은 경우 이미지가로드되고 있음을 사용자에게 알리는 일종의 UI를 만드는 것이 좋습니다.

다음과 같은 뜻 : I 메모리에 비트 맵을 저장하려면 다음 코드를 사용

을 (지연을 일으키는 이미지 어떠했는지를 확인하려면, 당신은 단순히 로그 캣으로 로그인되어 DDMS에서 봐 가지고 제안) 메모리에 쓰기 :

public void writeBitmapToMemory(String filename, Bitmap bitmap) { 
     FileOutputStream fos; 
     // Use the compress method on the Bitmap object to write image to the OutputStream 
     try { 
      fos = game.openFileOutput(filename, Context.MODE_PRIVATE); 
      // Writing the bitmap to the output stream 
      bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos); 
      fos.close(); 
      // this.gameEngineLog.d(classTAG, "Bitmap successfully written: " + filename); 
     } 
     catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      // this.gameEngineLog.d(classTAG, "Bitmap couldn't be written: " + filename); 

     } 
     catch (IOException e) { 
      e.printStackTrace(); 
      // this.gameEngineLog.d(classTAG, "Bitmap couldn't be written: " + filename); 

     } 

    } 

이 메모리에서 읽습니다 :

public Bitmap readBitmapFromMemory(String filename) { 
     Bitmap defautBitmap = null; 
     File filePath = game.getFileStreamPath(filename); 
     FileInputStream fi; 
     try { 
      fi = new FileInputStream(filePath); 
      defautBitmap = BitmapFactory.decodeStream(fi); 
      // this.gameEngineLog.d(classTAG, "Bitmap successfully read: " + filename); 
     } 
     catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      // this.gameEngineLog.d(classTAG, "Bitmap couldn't be opened: " + filename); 
     } 

     return defautBitmap; 

    } 
관련 문제