2012-11-26 2 views
0

모든 프레임을 메모리에 별도의 비트 맵으로로드하고 스레드 루프를 통해 imageViews에 할당하여 gif의 애니메이션을 적용하는 앱이 있습니다.Android 앱 메모리 제한

imageViews은 조각 상에 있으며, 단편은 pageViewer에 로딩된다. 페이지 뷰어의 화면 제한을 1로 설정 했으므로 대부분 한 번에 세 조각/gif를 처리합니다.

11-25 17:28:34.269: E/dalvikvm-heap(524): 292000-byte external allocation too large for this process. 
11-25 17:28:34.269: E/(524): VM won't let us allocate 292000 bytes 

나는 2.3.3에 있지만 4.0.3 에뮬레이터 또는 동일한 오류가 발생합니다 : 세 GIF를 동시에 메모리에있는 경우

지금 2.1 에뮬레이터에 나는이 오류 내 갤럭시 탭 10.1 4.0.4 실행 - 그 두 잘 실행하고 상당히 빠릅니다.

1024x999 3.2MB gif를로드하려고 시도했지만 4.0.3 에뮬레이터도 실패했지만 내 태블릿에서도 계속로드가 중단 될 때까지 여러 가지 gif가 표시됩니다. 이 앱은 약 250-300MB의 RAM을 사용했습니다.

실제 장치가 어떻게 작동하는지 예측할 수있는 방법이 있습니까? 더 높은 API 버전을 타겟팅해야합니까?

+0

gif가 웹에서로드 되었습니까, 아니면 사용자가 제공합니까? 리소스 인 경우 대신 애니메이션을 사용해야합니다. 최근에 다음 질문이있었습니다. http://stackoverflow.com/questions/12977039/android-loading-images-with-a-delay/12978091#12978091 – dmon

+0

또한 앱당 한도는 기기의 메모리보다 훨씬 작습니다 . – dmon

+0

"앱은 약 250-300MB의 RAM을 사용했습니다." 너무 비싸다. http://stackoverflow.com/questions/2630158/detect-application-heap-size-in-android 일부 장치는 심지어 – zapl

답변

1

많은 비트 맵을로드 할 때 매우주의해야합니다. 필요한 메모리 양을 쉽게 초과 할 수 있습니다. 을 기억하십시오. 제한된 장치에 있습니다. DO NOT 무제한의 리소스로 최대한 효율적으로 메모리를 사용하십시오. 당신이 안드로이드 dev에 사이트에 대한 모범 사례를 배우면

당신은 매우 가능성이 문제를 해결할 수 있습니다 :

http://developer.android.com/training/displaying-bitmaps/load-bitmap.html

은 그것을 읽기를주고, 당신이 당신의 문제를 해결하는 데 도움이됩니다.

+0

분명히 메모리 사용을 억제 할 수있는 방법이 있습니다.하지만 그렇게 할 계획이 있습니다.하지만 걱정스러운 점은 일관성이 부족하다는 것입니다. 나는 gif의 파괴를 시도하는 데 약간의 시간을 할애했다. 사용자가 앱의 메모리 한도를 넘었다 고 가정하고 실제 장치에서 시도한 결과 필요하지 않으며 앱의 제한이 없다는 것을 알았 기 때문에 사용자가 다음 조각으로 간다. 트리거 됨. – Arnas