2014-01-14 5 views
2

단일 스레드를 사용하여 런타임에 ImageViews (약 13)를 추가 할 레이아웃이 있습니다. 7 개 또는 8 개의 이미지 (970px x 970px, 270kb)를로드하면 응용 프로그램이 충돌하여 메모리 부족 오류가 표시됩니다. 이제 13 개의 다른 이미지를 선택하는 대신 동일한 이미지를로드하면 잘 표시됩니다. 또한 이미지의 크기를 줄이면 (16px x 16px, 770bytes) 잘 표시됩니다.Android Out of Memory 리소스에서 이미지를로드 할 때 오류가 발생했습니다.

그렇다면 이미지로드시 허용되는 최대 메모리는 누구에게 알 수 있습니까? 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 분명히 사람들은 이미지 갤러리를로드하는 등의 이유로이 문제를 해결했습니다. 응용 프로그램에 이미지를로드하는 가장 좋은 방법은 무엇입니까? 어떤 도움이라도 대단히 감사하겠습니다.

다음은 자원에서 이미지를 읽는 방법입니다. 이것은 내가 읽을 수있는 객체 목록에서 "drawableName"을 가져 오는 루프 내입니다. 이것은 모든 스레드의 onPostExecute 내에서 (즉, 새로운 AsyncTask를())

String defType = "drawable"; 
String defPackage = this.getPackageName(); 
int resourceId = Activity.this.getResources().getIdentifier(drawableName, defType, defPackage); 
((ImageView) view.findViewById(R.id.iv_image)).setImageResource(resourceId); 
+0

http://stackoverflow.com/questions/16765899/out-of-memory-error-with-bitmap/16766123#16766123합니다. 이것이 도움이된다면 이것을 확인하십시오 – Raghunandan

+0

이 이미지들은 꽤 큽니다 ... – njzk2

+0

고마워요, 그 링크 Raghunandan을 확인하겠습니다. njzk2, 평균 크기는 어떻게 되나 모든 화면 크기에서 이미지를 호환 가능하다고 생각하십니까? 로드하는 이미지의 수가 실제 크기를 반영하므로 실제 크기가 큰 차이를 만들지 않는다고 가정 해보십시오 (예 : 100 개의 작은 이미지로드는 10 개의 큰 이미지로드와 같을 수 있음). –

답변

4

내가 표시하려고하는 이미지 만로드하고 appropiate 크기로 크기를 조정하여 시도 할 것입니다. 이미지를 효율적으로 표시하는 방법에 대한 안드로이드 문서의 가이드가 있습니다. read here

피카소 라이브러리 http://square.github.io/picasso/ 또한 이러한 종류의 작업에 유용합니다.

6

문제를 가장 빨리 해결하는 방법은 Jake Wharton의 Picasa 라이브러리를 사용하는 것입니다. http://square.github.io/picasso/

당신이 필요로하는 모든 코드는 다음과 같습니다 :

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); 
은 여기

라이브러리를 다운로드 할 수있는 링크입니다 등등 다운로드, 당신의 이미지를로드 및 캐싱, 변환을 관리하는 코드 한 줄 수 있습니다

그것은 마법처럼 작동합니다 :)

+0

이 라이브러리를 사용하고있는 솔루션을 얻었습니다. 250 이미지는 빠른 방법부터로드됩니다 ... !! 감사 –