2012-03-28 5 views
2

저는 OOM 개념에 대해 매우 잘 알고 있습니다. 나는 많은 질문을 여기에서 물어 보았습니다. 그리고 저는 OOM에 대한 반복되는 질문처럼 들리 겠지만, 지금은 다른 문제가 있습니다.Out of Memory with ListView

나는 수십 수백 개의 이미지를 가지고 있는데, 하나의 이미지에 ListView 하나만 표시하면 Activity입니다.

저는 Fedor의 게으른 로딩 개념을 사용했습니다.

코드는 이미지가 작을 때 (50-100 이미지와 비슷 함) 잘 작동하지만 사용자가 ListView (결국)을 통해 스크롤하면 곧 200에서 300 이미지가 나옵니다. 메모리 부족 예외입니다.

개발자 사이트에서 here으로 표시된 것과 같이 효율적인 어댑터 개념을 사용하고 있으며 이것이 최상의 맞춤형 어댑터 사용 방법이라고 생각합니다.

내가 지금까지 본 모든 제안은 비트 맵 크기를 줄이거 나 다른 방법으로 축소하여 만든 것입니다. 나는 이미 그 방법을 시도했다. 그러나 OOM은 어느 시점에서 발생합니다.

이미지의 품질을 떨어 뜨리는 것은 사용자 환경에 영향을주는 것으로 보이고 많은 양의 비트 맵에서는 작동하지 않기 때문에이 예외를 처리하는 방법처럼 보이지 않습니다. 여기

내 질문은 :

  1. 어떻게 움에 직면하지 않고 단일 ListView에서 n 이미지를 표시합니까?
  2. 이 시나리오에서 가장 좋은 전략은 무엇입니까?
  3. 하나의 이미지에 약 500 개의 이미지를 표시 할 수 있습니까? ListView?

도움을 주시면 감사하겠습니다.

+0

바보 같은 질문에 사과드립니다.하지만 500 개의 이미지를 모두 기억합니까? – Blackbelt

+0

아니요. 나는 그것을 메모리에 보관하고 싶지 않습니다. 나는 게으른 로딩 개념을 사용하여 sdcard에 저장합니다. –

+0

같은 종류의 캐시를 사용하여 비트 맵을 메모리에 유지합니까? – Blackbelt

답변

0
  1. googles shelvesproject를 살펴보십시오.
  2. Shelves 프로젝트는 다음을 수행합니다. 이미지를로드하는 동안 자리 표시 자 이미지를 사용하고, 이미지를 저장하는 데 약한 참조를 사용하고, 지우기로 업데이트 된 지연 처리기를 업데이트합니다.
  3. 예, 아니요,이 많은 항목으로 listview 할 수는 있지만이 많은 이미지를 동시에 메모리에 모두 저장할 수는 없습니다.
0

이 API 레벨 이전에 API 레벨 11 이상의 이미지로 시도하면 응용 프로그램 힙에 배치됩니다. 그리고 예, 500 개의 이미지와 매끄럽게 작동하는 List View를 가질 수 있습니다 (예 : 연락처 애플리케이션).

http://code.google.com/p/android-imagedownloader/은 이미지 가져 오기, 캐시 및 재활용에 도움이 될 수 있습니다.