2011-01-18 6 views
3

이미지 조작 도구를 쓰고 있습니다. 이미지 품질을 이유로 최대한 큰 크기로 이미지를 편집하고 싶습니다.안드로이드 앱이 남긴 메모리 양을 알려주는 방법은 무엇입니까?

내 앱이 실행되는 동안 메모리가 부족하지 않도록주의해야합니다. 또한 많은 메모리가있는 장치를 활용하고 싶습니다. 예를 들어, G1과 같은 덜 강력한 기기에서 중간 크기의 이미지를 지원하고 삼성 Galaxy S와 같은 더 강력한 기기가 큰 이미지를 지원하도록하고 싶습니다.

내 앱에서 사용할 수있는 메모리 양을 측정하는 신뢰할 수있는 방법이 있습니까?

현재 아이디어로는로드 할 이미지 크기를 결정할 때 기기가 가능한 한 최대 70 % 가까이 앱의 메모리 사용량을 가져 오는 이미지 크기를 계산할 수 있습니다 (즉, t 나중에 나 때문에 메모리 조각화)의 작은 할당에 충돌 응용 프로그램을 원하는

나는 내가 사용 가능한 메모리의 백분율 반환하려면 다음 코드를 사용할 수 있습니다 발견했습니다

double totalMemoryUsed = (Runtime.getRuntime().totalMemory() + android.os.Debug.getNativeHeapAllocatedSize()); 
int percentUsed = (int)(totalMemoryUsed/Runtime.getRuntime().maxMemory() * 100); 

새로운 비트 맵이 추가를 네이티브 힙 할당 부분. 이것은 신뢰할 수있는 것 같습니다 내 애플 리케이션은 예상치 못하게 추락으로 메모리 부족 오류 % percentUsed 100 % 이상갑니다. 위의 계산에 대해주의해야 할 사항이 있습니까?

+0

내가 걱정할 것은 모든 것이 괜찮다는 것입니다. 그리고 나서 안드로이드가 이전에 자원을 죽인 백그라운드 프로세스를 재개하여 결과적으로 응용 프로그램을 중단시킬 것을 결정했습니다. –

+0

귀하의 계산이 제게 의미가 없습니다. IMHO 당신은'Runtime.freeMemory()'와'Runtime.totalMemory()'의 조합을 사용해야합니다. Debug.getNativeHeapAllocatedSize()를 사용하는 경우 두 번 계산할 수 있습니다. http://stackoverflow.com/questions/1945142/bitmaps-in-android/1949205#1949205 Runtime.totalMemory()는 사용 가능한 양입니다. 를 프로그램에 할당하는 반면 maxMemory()는 VM에 사용할 수있는 양입니다. – Roland

답변

0

위의주의 사항이 있습니까? 계산이 필요합니까?

내 첫 번째 생각은 실제로 수행 할 때의 계산 정확도에만 의존 할 수 있다는 것입니다. Android에는 백그라운드에서 실행되는 모든 종류의 서비스 및 기타 애플리케이션이 있습니다. 어떤 순간에 현재 사용중인 메모리 양이 변경 될 것입니다. 계산을 다시 수행 할 때까지 얼마만큼 말할지는 없습니다. 또한 두 전화기가 비슷해 보이지 않으므로 정확하게 추정 할 수 없습니다.

당신은 거의 확실하게 생각할 수없는 일정한 기초 위에서 이것을 재 계산하는 스레드 또는 비동기 작업이 필요할 것입니다.

나는 이것에서 벗어나 다른 전략을 사용하여 앱을 만드는 것을 고려합니다. 그러나 당신이 그것을 계속 추구한다면 당신에게 행운을 빈다.

+0

그러나 현재 응용 프로그램의 최대 메모리에 최대 메모리 매개 변수가 반환됩니다 (응용 프로그램이 끝나면 해당 메모리는 강제 종료됩니다). 예를 들어, G1에서는 응용 프로그램 당 16MB로 제한됩니다. 백그라운드에서 실행중인 내용이 변경되지 않습니다. – rbcc

관련 문제