Android fast Carga de mapa de bits

Tengo un bloque de imágenes que quiero cargar en mi pantalla. Todas las imágenes son archivos que descargué y almacené en SD-CARD.

Hasta ahora he encontrado dos maneras de hacerlo, primero es cargarlos en el hilo principal, cuando la actividad está empezando, (tengo alrededor de 70 imágenes y me toma alrededor de 2,1 segundos para cargarlas todas).

Otra forma es lo que estoy probando ahora mismo. Cargarlos en el hilo separado, así que mientras tanto puedo mostrar la carga de animación para el usuario. Por ahora mi implementación con ThreadPoolExecutor tomó 4.3 segundos. Lo hice en 10 hilos.

Y el último método, (es la única cosa que no probé todavía) está trabajando con la hoja del sprite.

No puedo usar caché de aplicaciones porque en mi aplicación tengo un montón de pantallas y cada pantalla tiene sus propias imágenes.

¿Qué piensas, cuál es la forma más rápida de cargar gran cantidad de imágenes y qué técnicas de aceleración sabes que me pueden ayudar?

5 Solutions collect form web for “Android fast Carga de mapa de bits”

Una opción sería utilizar crear caché de imágenes utilizando la WeakReference para que la imagen se eliminaría de la memoria cuando el sistema encuentre una situación de memoria baja. De esta manera usted puede mantener las imágenes en la memoria y sólo necesita la carga de sdcard cuando no están en la memoria. Por lo tanto, su actividad actual siempre mantendría la referencia difícil a los mapas de bits necesarios y el caché de imágenes mantendría la referencia débil al mapa de bits.

A continuación hay más información sobre la referencia débil:

JavaDoc weakReference

Poste de StackOverflow que discute usando la referencia débil para la memoria caché

  1. No cargue el hilo principal. Con 2,1 segundos de retraso estás cerca de ser asesinado con ANR (aplicación no responde) error si bloquea el hilo principal.

  2. Cargue en hilo separado. No cree 10 subprocesos, sino un AsyncTask , y cargue todas sus imágenes una tras otra en doInBackground .

    Cargar en AsyncTask debe tomar (casi) el mismo tiempo que la carga en el hilo principal. No ponga demasiadas animaciones sofisticadas, por lo que el hilo principal no consume demasiado tiempo de CPU.

Una manera de hacer esto será implementar un tipo de oyente / observador.

Desde el hilo de UI, inicie otro hilo que cargue la imagen. Una vez cargada la imagen, el subproceso invocará un método de devolución de llamada implementado en la clase de actividad para actualizar la vista de imagen correspondiente.

En lugar de Android asynch tarea, voy a ir para mis hilos (agrupados / Ejecutores). Voy a obtener todas las rutas de imagen posibles antes de cargarlos, y enviarlos a la carga de rosca de la imagen. Y en la devolución de llamada sé dónde actualizar la imagen.

También puede comprobar cómo funciona el cargador en su caso.

Claramente, no debe dejar una operación de 2s en el subproceso de interfaz de usuario.

Supongo que el ThreadPoolExecutor es una solución godd, pero no es óptimo para crear muchos hilos en su piscina. En el hilo de fondo es suficiente. Apuesto a que tendrás un mejor rendimiento simplemente cambiando esto.

No recomiendo un AsyncTask directamente de la actividad, porque es frágil al cambio del config .

No recomiendo trabajar con sprites. Aumentar el tamaño de una imagen es muy peligroso en un móvil donde la memoria es limitada. En particular con los sprites, tendrás que obtener partes del Bitmap de Bitmap , por lo tanto tener el mapa de bits completo en la memoria por un momento.

Ahora que he unanwsered sus preguntas específicas, creo que ir throuh carga Lazy de imágenes en un listview porque el problema es muy similar.

Muy tarde. Pero podría ser útil para futuros devlprs. Desea obtener la imagen uri por los proveedores de contenido o desea mostrar la imagen en listview o gridview. Si es así, puede utilizar el cargador Picasso para cargar imágenes asincrónicamente. Esperanza. ayuda.

  • Bordes negros alrededor de la captura de pantalla tomada
  • Generar mapa de bits de HTML en Android
  • Cómo tomar una foto, guardarla y obtener la foto en Android
  • Fusionar ImageView con una sola imagen de mapa de bits (Android)
  • Utilizando el método -canvas.drawBitmap (bitmap, src, dst, paint)
  • Convertir vista en mapa de bits
  • Obtener mapa de bits de ImageView en Android L
  • Mapa de bits extraño con 1 Mb de Heap
  • Cómo corregir "lienzo: intentando utilizar un error de mapa de bits reciclado"?
  • Java.lang.OutOfMemoryError BitmapFactory.nativeDecodeAsset ()
  • Cambiar el tamaño de un mapa de bits a un valor fijo, pero sin cambiar la relación de aspecto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.