내 앱 사용자는 이미지 및 프로그램을 선택하여 사용자가 이미지를 변경할 수 있습니다. 거기에 다른 안드로이드 장치가 많이 있기 때문에 내 프로그램이 힙 크기가 작은 장치 중 일부에서 충돌합니다. VM 예산 때문에 충돌하지 않도록 사용자의 휴대 전화에 가장 적합한 크기를 계산하고 싶습니다. "Picsay Pro"에서 스크린 샷을 추가하여 정확하게 찾고 있습니다. "BitmapFactory.Options"에 대한 내 유일한 문제는 VM 예산으로 인해 응용 프로그램을 충돌시키지 않는 이미지 크기를 결정하는 방법을 찾는 것입니다.VM 예산을 초과하지 않는 최적의 이미지 크기를 선택하는 방법은 무엇입니까?
답변
을 도울 수 있다고 생각() .maxMemory() - Total Heap Limit 크기 (바이트)를 반환합니다.
Debug.getNativeHeapAllocatedSize() - 응용 프로그램에서 이미 사용하고있는 데이터의 양 (바이트)을 반환합니다.
이 공식으로 사용하고있는 비트 맵의 크기를 계산은 long Bytes_allocated = (height of the Image) * (width of the Image) * 4;
는 응용 프로그램의 appropiate 크기를 선택하는 freeMemory
및 Bytes_allocated
비교.
사실은 두 가지 이유로 전화 이미지를 압축 끝났다. 하나는 업로드 속도이고 다른 하나는 힙 문제입니다. 비슷한 일을 시도하거나 최소한 스택 추적을 게시 할 수 있습니다!
long freeMemory = (Runtime.getRuntime().maxMemory()) - (Debug.getNativeHeapAllocatedSize());
,
Runtime.getRuntime :
Android outofmemory error bitmap size exceeds vm budget in 2.3.3
내가이 압축 기술은 여유 공간이 전화에 남은 계산
지금까지 이미지 크기와 사용 가능한 메모리를 다루는 신뢰할만한 방법을 찾지 못했습니다. 문제는 메모리가 매우 빨리 조각화되어 10MB의 여유 공간을 가질 수 있지만 2MB 이미지의 연속 공간이 없기 때문입니다. 실제로 필요한 것은 가장 큰 여유 공간의 크기이지만이 방법을 찾는 방법은 없습니다. 메모리를 조각 모음하는 방법이 더 좋을 수도 있지만, 이와 같은 기능은 없습니다.
그래도 사용 가능한 메모리가 이미지보다 작 으면 사용하려고하면 충돌이 발생할 수 있으므로 적어도 사용하기 전에 확인하는 것이 좋습니다.
2012 년 말 태블릿의 해상도가 1920x1280 인 지금은 하나의 배경 이미지에 20MB의 연속 메모리가 필요합니다! 이 태블릿 중 일부는 이제 256MB까지 힙을 허용하지만 더 많은 VM 공간을 버리고 겉으로는 해결할 수 있지만 실제로는 메모리 조각 모음 또는 공간 확보 방법이 필요합니다.
이미지 크기를 조정하거나 수정하지 않고 변경된 각 이미지의 크기가 같고 앱을 Android 3으로 제한하는 데 도움이되는 트릭이 하나 있습니다.0+ :
Options opt2 = new BitmapFactory.Options();
opt2.inBitmap = mBitmap; // reuse mBitmap to reduce out of memory errors
mBitmap = BitmapFactory.decodeResource(getResources(), myDrawable, opt2);
이렇게하면 이미지의 메모리 영역 m 비트 맵이 다시 사용됩니다.
- 1. OutOfMemoryError : 비트 맵 크기가 VM 예산을 초과합니다
- 2. java.lang.OutOfMemoryError : 비트 맵 크기가 VM 예산을 초과합니다.
- 3. 비트 맵 크기가 VM 예산을 초과합니다.
- 4. 최적의 스레드 스택 크기를 결정하는 방법은 무엇입니까?
- 5. 품질 표시 - 비트 맵 크기가 VM 예산을 초과 함 오류
- 6. 원본 데이터의 크기를 초과하지 않고 데이터를 암호화하는 방법은 무엇입니까?
- 7. 이미지 경로를 선택하는 방법은 무엇입니까?
- 8. 지난 7 일 동안 행을 선택하는 최적의 방법은 무엇입니까?
- 9. ImageView : OutOfMemoryError : 비트 맵 크기가 기기의 VM 예산을 초과합니다.
- 10. Android OutOfMemoryError : 비트 맵 크기가 VM 예산을 초과합니다.
- 11. 작은 이미지, 회전 없음, 여전히 OutOfMemoryError가 발생 함 : 비트 맵 크기가 VM 예산을 초과 함
- 12. 버튼 내부의 이미지 크기를 조정하는 방법은 무엇입니까?
- 13. 파이썬에서 이미지 크기를 조정하는 방법은 무엇입니까?
- 14. SQL 클러스터링 또는 VM 이미지
- 15. Rails에서 존재하지 않는 변수를 처리하는 최적의 방법은 무엇입니까?
- 16. get_serving_url을 사용하여 최대 이미지 크기를 지정하는 방법
- 17. Win32에서 최적의 디스크 IO 블록 크기를 어떻게 결정합니까?
- 18. 프로그래밍 실습 : UDP 데이터 그램의 패킷 크기를 선택하는 방법은 무엇입니까?
- 19. 자바 창 내용의 크기가 조정되지만 최소 크기를 초과하지 않습니다.
- 20. 이미지 크기를 신경 쓰지 않는 이미지 유사성 라이브러리를 찾고
- 21. 부두에 VM 옵션을 추가하는 방법은 무엇입니까?
- 22. 요소를 선택하는 방법은 무엇입니까?
- 23. TTURLRequestCachePolicy를 선택하는 방법은 무엇입니까?
- 24. ImageMagick으로 크기를 조정하는 방법은 무엇입니까?
- 25. VM 외부의 Azure VM (VM 역할)에 설치된 SQL Server에 액세스하는 방법은 무엇입니까?
- 26. jQuery를 사용하지 않는 선택기를 사용하여 상대 URL을 선택하는 방법은 무엇입니까?
- 27. 이미지의 크기를 조정하는 방법은 무엇입니까?
- 28. 실패하지 않는 이미지 업로드
- 29. 병에 VM 옵션을 추가하는 방법은 무엇입니까?
- 30. 날짜가 유효한 날짜이며 2038 년을 초과하지 않는 방법을 찾는 방법은 무엇입니까?