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); } } } // ... }
- Cómo crear el botón dinámicamente en android?
- Codificación de caracteres de cadena con Android y Oracle Java
- ¿Cómo obtengo la hora más precisa con Android?
- Lona de Android, múltiples rutas con diferentes cantidades de zoom
- Cómo cancelar una solicitud http
- Excepción de SDK de Google Drive
- LocationClient requestUpdates onLocationChanged nunca llamado
- Android: cómo mostrar el gridview en blanco con el botón
- ¿Por qué utilizar Retrofit cuando tenemos OkHttp
- Android Game API: Leaderboard - ¿Obtener puntuación de jugador específico?
- ¿Cuál es el mejor protocolo de comunicación de cliente de servidor para usar en Android e iOS?
- Env-> FindClass función devuelve null
- Error: org.gradle.api.internal.changedetection.state
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.
- ¿Es posible configurar el fondo de pantalla tal como se hace con la aplicación que viene con Android?
- Seguimiento de acciones Autolink en texview onClickListner