2012-12-18 3 views
0

간단한 질문을 보내주십시오. 나는 java.lang.outofmemory 오류로 싸운다. I t는 사진으로 인한 것일뿐 아니라 현재 프로젝트에서 사용되지 않은 가져 오기 및 사용되지 않은 변수가 7 개 액티비티 및 모든 액티비티 aprox 40 개 변수가있는 응용 프로그램에 많이 포함되어 있습니다.Android java.lang.Outofmemorry + 가져 오기

사용하지 않은 가져 오기 및 사용하지 않은 선언 된 변수 메모리를 사용 하시겠습니까? 많은 변수와 가져 오기 때문에 발생하는 java.lang.outofmemory 오류가 될 수 있다고 생각하십니까?

+2

아니요, 그렇지 않습니다. 두 질문 모두 – Blackbelt

+0

아니, 수입은 아무 관계가 없습니다. 또는 코드의 크기. 너 사진이야. – dmon

답변

0

아니요, 변수는 응용 프로그램의 Heap에서 더 많은 메모리를 차지하지 않습니다. 이는 응용 프로그램의 bitmap 일 수 있습니다. 어떤 오류가 발생하는 경우,이 레이아웃에 사용되는 당김 이미지를 제거합니다

imageview.setBackgroundDrawable(null); 
relativeLayout.setBackgroundDrawable(null); 

또는

imageview.setBitmapImage(null); 

처럼 당신이 발표 한 이미지의 배경을 확인합니다. 안드로이드에서

+0

활동을 끝내고 다음 활동으로 넘어갈 때이 코드를 ondestroy()에 사용 하시겠습니까? – mira

+0

하나의 액티비티에서 다른 액티비티로 이동하는 경우,이 코드를'onStop()'에두면, 액티비티가 백그라운드에서 실행될 때마다'onStop()'이 호출되고, 메인 액티비티' onResume()'메서드에서'drawBackgroundResource()'에 의해 드로어 블을 놓을 수 있습니다. –

+0

@ChintanRathod'onPause()', onStop()보다는 오히려. – Doomsknight

2

는 :

비트 맵 특히 사진과 같은 풍부한 이미지, 메모리를 많이 차지합니다. 예를 들어 Galaxy Nexus의 카메라는 최대 크기가 2592x1936 픽셀 (5 메가 픽셀) 인 입니다. 비트 맵 구성이 ARGB_8888 (Android 2.3 이후의 기본값) 인 경우 이 이미지를 메모리에로드하면 약 19MB의 메모리 (2592 * 1936 * 4 바이트), 즉 이 일부 장치에서 앱 당 한도를 소모합니다 .

기본적으로 이미지는 올바르게 사용되지 않으면 킬러가됩니다.

구체적 Loading Large Bitmaps Efficiently

에이 안드로이드 자습서를 참조하십시오, 필요한 해상도 파일/자원에서 스케일 비트 맵의 ​​로딩 코드 예제.

임포트는 런타임에 메모리에 영향을 미치지 않습니다. 그들이 할 수있는 유일한 방법은 빌드 시간을 늦추는 것입니다. 해로운 것은 없어요.

+0

예.하지만 크기가 20KB, 크기가 200x200px (300x300px) * 배경이 700x700 픽셀 인 * .png 그림이 있습니다. 배경 그림은 활동이 시작된 후 애니메이션 번역을 사용합니다. 나는 그림이 작고 나의 장치가 아주 강하다고 생각한다. Tablet Acer Iconia 500. 애니메이션에 약간의 메모리가 필요하다고 생각하십니까? 나는 그림이 아주 작아서이 오류가 나에게 이상하다고 생각한다. – mira

+0

@mira 200x200 크기의 사진이 몇 장 있습니까? 애니메이션이 문제가되어서는 안됩니다. 700x700은 여전히 ​​괜찮지 만 여전히 2MB입니다. – Doomsknight

+0

4에서 12 장의 사진 (각 액티비티마다 다름) +1 700x700 배경. 투명도 때문에 나는 png 파일을 사용하고 일부 배경은 500-900kB 정도의 매우 큰 데이터로 보인다. 그러나 나는 그 (것)들을 더 감소시키는 sollution를 찾아 내지 않았다. – mira

관련 문제