Android: error de "intentar utilizar un mapa de bits reciclado" con Bitmaps temporales
Mi aplicación puede cargar imágenes muy grandes. En un esfuerzo por conservar la memoria, estoy intentando utilizar un bitmap temporal para cargar y otro para la imagen final después de la transformación:
..... finalBitmap.recycle(); finalBitmap = null; Bitmap tempBitmap = BitmapFactory.decodeStream(fin, ...); finalBitmap = Bitmap.createBitmap(tempBitmap, ....); imgview.setImageBitmap(finalBitmap); .....
Ahora, en este punto hemos terminado con tempBitmap, que sólo se necesitaba para transportar el bitmap decodificado al paso de transformación en createBitmap. Asi que:
- ¿Cómo personalizar el Gestor de diseño de cuadrícula de la vista de reciclador?
- Adaptador RecyclerView que toma valores erróneos
- No se pudo resolver: com.android.support:cardview-v7:26.0.0 android
- Diffutil en recycleview, lo que hace autoscroll si se agrega un nuevo elemento
- OnBindViewHolder () nunca se llama en vista en posición aunque RecyclerView.findViewHolderForAdapterPosition () devuelve null en esa posición
..... tempBitmap.recycle(); tempBitmap = null; .....
Y … se bloquea con un error de "intentar usar un mapa de bits reciclado" específicamente debido al reciclaje de tempBitmap. TempBitmap no se muestra y sólo se utiliza allí mismo .
¿Qué pasa aquí? ¿Debo usar "finalBitmap" y confiar en createBitmap para gestionarlo ( finalBitmap = Bitmap.createBitmap ( finalBitmap , ….))? No puedo ver qué dependencia en curso de tempBitmap que habría que causaría tal fracaso.
Edit: Sí, la asignación nula parece resultar en la recopilación de basura apropiada, pero estoy desconcertado por qué recycle () en un bitmap de temp es tan problemático en este caso. Tengo la impresión de que createBitmap () es la celebración de una referencia a ella, pero ¿por qué, y por cuánto tiempo?
- Android: No se puede resolver el método 'findFirstVisibleItemPosition ()'?
- Implementación de la vista de reciclador anidada como aplicación de Google Play Store
- Configurar la propiedad scrollbars en RecyclerView bloquea mi aplicación
- Diseño de cuadrícula con vista de reciclador android
- Desplazamiento horizontal y vertical en la vista del reciclador android
- Desplazamiento sincronizado de múltiples RecyclerViews
- Android RecyclerView, el reciclaje no funciona correctamente
- Android: SortedList con duplicados
Directamente desde la documentación de Android:
Devuelve un mapa de bits inmutable del subconjunto especificado del mapa de bits de origen. El nuevo mapa de bits puede ser el mismo objeto que el origen o se puede haber realizado una copia.
Parece que las funciones createBitmap tienen el potencial de volver a utilizar el mapa de bits que proporcionó. Si ese es el caso, entonces no debería reciclar el mapa de bits temporal ya que su mapa de bits final lo está utilizando. Una cosa que puedes hacer es
if(tempBitmap != finalBitmap) { tempBitmap.recycle(); }
Eso sólo debería reciclar el tempBitmap cuando no es el mismo que el finalBitmap. Al menos eso parece ser lo que implica la documentación.
- ¿Cómo encontrar la cantidad de almacenamiento gratuito (espacio en disco) que queda en Android?
- Cómo filtrar correctamente Paquete reemplazado broadcast