2011-05-02 5 views
6

저는 카메라 응용 프로그램을 만들고 있습니다. 처음으로 나는 그것의 작동 벌금 이미지를 캡처하지만 난 다시 사진을 찍을 경우는이 방법 힙 및 VM을 취소 처리 오류 힙을 지우는 방법?

ERROR/dalvikvm-heap(2398): 10077696-byte external allocation too large for this process." VM won't let us allocate 10077696 bytes" and finally"05-02 05:35:38.390: ERROR/AndroidRuntime(2398): FATAL EXCEPTION: main 05-02 05:35:38.390: ERROR/AndroidRuntime(2398): java.lang.OutOfMemoryError: bitmap size exceeds VM budget

및 애플리케이션 힘 closes..how를 던지는 경우? 제발 .. 미리 감사드립니다.

답변

4

답변을 찾았습니다.
나는 다음과 같은 코드를 사용 :

BitmapFactory.Options bfOptions=new BitmapFactory.Options(); 

       bfOptions.inDither=false;      //Disable Dithering mode 

       bfOptions.inPurgeable=true;     //Tell to gc that whether it needs free memory, the Bitmap can be cleared 

       bfOptions.inInputShareable=true;    //Which kind of reference will be used to recover the Bitmap data after being clear, when it will be used in the future 

       bfOptions.inTempStorage=new byte[32 * 1024]; 
    CameraTricks.SdCardImage= BitmapFactory.decodeFile(CameraTricks.yu,bfOptions); 
CameraTricks.yu is my path to bitmap 
+0

I이 옵션을 시도를,이 API 2.3 작동하는 것 같다. 그러나 2.3 이하의 API에서는 그렇지 않습니다. 문제는이 줄에있는 것 같다.'bfOptions.inTempStorage = new byte [32 * 1024]; VM은 스토리지 용량을 늘릴 수 없습니다. –

+0

문제가없는 2.2 및 2.1에 대한 작업이 없습니다 – Sando

+0

2.3 이상은 어떨까요? – RobinHood

1

당신은 미리 감사드립니다. 당신은 장치를 소프트 리셋 할 수는 있지만, 그게 좋을 것 같지는 않습니다. Android의 가비지 수집기가 처리해야합니다.

대부분의 경우 앱이 일부 작업에 너무 많은 메모리를 사용하고 있습니다. DDMS를 사용하여 메모리 사용량을 확인할 수 있습니다 (read about it here).

당신은 모든 링크에서 유사한 문제에 대해 읽을 수 있습니다

:

몇 가지 큰 이미지를로드하는 것이 일반적인 테마처럼 보입니다. 더 이상 사용하지 않는 이미지 (또는 다른 대형 객체)에 대한 참조를 유지하지 않도록하십시오. 그러면 가비지 수집기가 해당 메모리를 복구 할 수 있습니다. 예를 들어 Bitamp.recycle()을 사용하십시오.

마지막으로 Avoiding Memory Leaks 문서를 읽어보십시오.