Cómo mantener un mapa de bits en la memoria

Siguiendo el proceso de Almacenamiento de un recurso de mapa de bits en una variable estática , parece que almacenar una referencia estática a un android.graphics.Bitmap en una View puede perder una referencia a la primera View que lo instanció. ¿Cuál es la forma idiomática de resolver esto en Android? No quiero llamar a BitmapFactory.decodeResource(resource, id) cada vez que instancia una instancia de esta vista porque esto se hará (muchas veces) en cada actividad. Quiero que este pequeño Bitmap de Bitmap siempre quede en la memoria. Así pues, cuál es la manera correcta de hacer lo siguiente:

 public class MyView extends View { private static Bitmap star; public MyView(Context context) { synchronized(this) { if (star == null) { star = BitmapFactory.decodeResource(getResources(), R.drawable.star); } } } // ... } 

Cree un método de limpieza estática en su vista que usted llama desde onPause de su actividad (). En esa llamada, llame al recycle() de mapa de bits recycle() y borre la referencia. Del mismo modo, en lugar de crear el mapa de bits en el constructor, tiene una llamada de inicialización que se llama en la actividad onResume() .

Si tiene alguna duda de que puede haber una superposición porque su vista se utiliza en todas las actividades, puede hacer que las llamadas de inicio y limpieza mantengan un recuento de referencia, de modo que el mapa de bits sólo se destruya cuando el recuento llegue a 0. Si el mapa de bits Es lo suficientemente pequeño, puede considerar onCreate() / onDestroy() también.

Asegúrese de revisar la referencia de mapa de bits en su clase de vista para null antes de usarla.

Acabo de notar que el campo es estático. Debe establecer un campo estático en un constructor ya que esto es confuso. Le sugiero que tenga un método estático que se llama, que establece el campo.

Puede sincronizar el método estático.


Los constructores son siempre seguros de hilo, por lo que no es necesario utilizar sincronizado o comprobar si hay nulo. Usted puede apenas fijar los campos (y lo hace final )

Por qué no sólo cargar la imagen en la actividad donde las vistas serán y pasar el mapa de bits a las vistas

O si lo hace sobre la aplicación completa, use el contexto de la aplicación para cargar la imagen.

  • Error: Ejecutando el comando 'ant', asegúrate de haber instalado y añadido hormigas a tu ruta de acceso
  • Convertir json a objeto Map.Entry con Gson
  • Serialización gson de cadena unicode no funciona
  • Android, pregunta rápida sobre vinculación de servicio
  • Crash con Android 4.1 con ArrayMap
  • Desplazarse a / establecer la posición de la preferencia de lista personalizada
  • Cambiar la configuración de WiFi en Android 5 (L) mediante programación
  • Android - java - WeakReferences con un ArrayList?
  • Conexión XMPP con Smack 4.1 en Android Studio
  • HTTPS con resultado de autenticación básico en Unauthorized
  • Cambiar mapa de bits Color con función
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.