studio quality libreria glide compressformat compress bitmaps android bitmap out-of-memory

android - quality - glide libreria



Error de memoria insuficiente al cargar mapas de bits (4)

Esto se debe a la alta resolución de la imagen que tiene para escalar el mapa de bits utilizando el siguiente código

Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); int h = 100; // height in pixels int w = 100; // width in pixels Bitmap photoBitMap = Bitmap.createScaledBitmap(myBitmap,h, w, true); ivTmp.setImageBitmap(photoBitMap);

Tengo una aplicación de Android con 3 actividades:

A1 - comienza -> A2 - comienza -> A3 - cuando termina su proceso: comienza -> A1

(así que no "finalizo ();" una aplicación. Comienzo las siguientes actividades con "startActivity (..);" todo el tiempo después de la interacción del usuario)

así que hay un bucle en estas 3 actividades. En cada actividad, muestro 3-9 imágenes, ubicadas en la tarjeta SD, que se cargan con mi siguiente función:

try { Uri selectedImageURI = Uri.parse(strImagePath); File imgFile = new File(getRealPathFromURI(selectedImageURI, c)); Bitmap myBitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath()); ivTmp.setImageBitmap(myBitmap); }catch (Exception e) { return null; }

Todo esto funciona. Pero a veces (después de recorrer varias veces mis actividades), mi aplicación se bloquea ...

Logcat me dice:

01-16 13:42:15.863: DEBUG/dalvikvm(23161): GC_BEFORE_OOM freed 10K, 9% free 59019K/64400K, paused 29ms, total 30ms 01-16 13:42:15.863: ERROR/dalvikvm-heap(23161): Out of memory on a 8018704-byte allocation. 01-16 13:42:15.863: ERROR/AndroidRuntime(23161): FATAL EXCEPTION: main java.lang.OutOfMemoryError at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:502) at android.graphics.BitmapFactory.decodeResourceStream(BitmapFactory.java:355) at android.graphics.drawable.Drawable.createFromResourceStream(Drawable.java:785) at android.content.res.Resources.loadDrawable(Resources.java:1965) at android.content.res.Resources.getDrawable(Resources.java:660) at android.widget.ImageView.resolveUri(ImageView.java:616) at android.widget.ImageView.setImageResource(ImageView.java:349) at <MyApp>.MyActivity$6.run(MyActivity.java:143) at android.os.Handler.handleCallback(Handler.java:725) at android.os.Handler.dispatchMessage(Handler.java:92) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:5039) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) at dalvik.system.NativeStart.main(Native Method)

Alguien me puede dar algunos consejos sobre cómo manejar los choques? Tal vez es porque mis actividades están configuradas para indicar "pausado" en lugar de cerrarlas correctamente?


Sí, Android no destruye inmediatamente las actividades cuando no son visibles para el usuario, pero hay una serie de métodos de ciclo de vida que se llaman en función del estado actual. Echa un vistazo a http://developer.android.com/guide/components/activities.html#Lifecycle

Puede intentar terminar las actividades en onStop () o onDestroy () ya que se llamarán cuando la actividad no esté visible y cuando el sistema se quede sin memoria respectivamente. :-)


Tuve el problema similar al mostrar imágenes de alta resolución. He buscado y aplicado todas las soluciones de mapas de bits de Android que se encuentran en http://developer.android.com/training/displaying-bitmaps/index.html y el siguiente mekanism de caché en el enlace. pero ninguno de ellos funciona. No hay ninguna solución correcta en cualquier lugar. Luego me di cuenta de que el problema es: no podía usar la estructura de carpetas dibujable correctamente. Guardaba imágenes de alta resolución en carpetas mdpi y hdpi. esta causa android escalar las imágenes a los tamaños ultra. La imagen de 100 kb causaba un aumento de 20 mb en la memoria gracias a la sección de monitor / memoria de Android. Así que he agregado estas imágenes de ultra resolución a la carpeta xxhdpi, luego se FIJÓ de repente. entonces mi control deslizante de imagen funciona perfectamente


para una solución rápida puede agregar

android:largeHeap="true" en su etiqueta de aplicación de manifiesto

enlace aquí:

Me enfrento a un problema de OOM para mi mesa en kindle y nook

Heap size (large) android:largeHeap="true"

allí se menciona la especificación para usar un enlace de pila más grande aquí:

Editar: usa el enlace de la técnica de mapas de bits aquí.