2016-09-13 7 views
-1

나는 안드로이드를 처음 접했고 내 앱은 가끔 outOfMemoryException이되었다. 따라서 내 응용 프로그램이 사용하는 RAM의 양을 확인하고이를 줄이기 위해 노력해야합니다.내 앱에 필요한 램 크기를 알아 보는 방법은 무엇입니까?

두 질문 :

  1. 어떻게 내 응용 프로그램이 사용하고있는 램의 크기를 알 수있는?
  2. 일반적으로 앱의 램 크기에 대한 안전 임계 값은 outOfMemoryException이되지 않도록 무엇입니까?

도움을 주셔서 감사합니다.

+0

여기를 방문하면 좋은 설명입니다 : http : //stackoverflow.com/questions/2630158/detect-application-heap-size-in-android/9428660#9428660 – Ironman

+0

언제 'OutOfMemory Exception'이 발생합니까? ImageView에 이미지를로드하려고 할 때이 '예외'가 표시됩니까? – LearnPainLess

+0

네,하지만 이상하게도 에뮬레이터에서 실행 중일 때는'OutOfMemory Exception'을 거의 얻지 못하며, 전화기에서 실행 중일 때는 항상 OutOfMemory Exception을 얻습니다. 귀하의 응용 프로그램에서 – Einsambr

답변

1

Android Studio의 내장형 memory monitor을 확인하십시오. 안드로이드 모니터>

을 모니터하고 문제의 두 번째 부분은 ActivtyManager 클래스의 getMemoryClass() 방법을 사용할 수 있습니다에서 찾을 것입니다. android doc ..

현재 기기의 대략적인 애플리케이션 별 메모리 클래스를 반환합니다. 전체 시스템이 가장 잘 작동하도록 메모리에 얼마나 많은 메모리를 두어야 하는지를 알 수 있습니다. 반환 값은 메가 바이트 단위입니다. 기본 안드로이드 메모리 클래스는 16입니다 (이 경우 디바이스의 Java heap 한도가됩니다). 메모리가 많은 장치는 24 이상을 반환 할 수 있습니다.

0

로드하기 전에 이미지 크기가 사용 가능한 메모리보다 작은 지 확인하십시오. 따라서 OutOfMemoryException을 처리하는 가장 효율적인 방법은 예외를 피하기 위해 많은 양의 데이터를 메모리에로드하려고 시도하지 않는 방식으로 응용 프로그램을 구조화하는 것입니다.

메모리에 이미지를 넣기 전에 내 응용 프로그램이 사용하고있는 램의 크기를 알고

Bitmap original = BitmapFactory.decodeStream(getAssets().open("1024x768.jpg")); 
ByteArrayOutputStream out = new ByteArrayOutputStream(); 
original.compress(Bitmap.CompressFormat.PNG, 100, out); 
Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); 

Log.e("Original dimensions", original.getWidth()+" "+original.getHeight()); 
Log.e("Compressed dimensions", decoded.getWidth()+" "+decoded.getHeight()); 
0

1.How를 사용하여 이미지를 압축? 이 질문은 대답하기가 어렵습니다. 앱 종류가 다르면 다른 메모리가 필요합니다.

2. 일반적으로 outOfMemoryException이 발생하지 않도록 앱의 RAM 크기에 대한 안전한 임계 값은 무엇입니까? 장치마다 다른 임계 값이 있습니다. 일반적으로

Runtime rt=Runtime.getRuntime(); 
long maxMemory=rt.maxMemory(); 
Log.i("maxMemory:",Long.toString(maxMemory/(1024*1024))); 

을 사용하면 사용할 수있는 maxMemory의 크기를 볼 수 있습니다. 그러나 이것은 정확하게는 아닙니다.

관련 문제