Según tengo entendido (no es que esté en lo cierto) Los drenajes generalmente se eliminan correctamente de la memoria cuando la aplicación termina con ellos. Sin embargo, los mapas de bits deben reciclarse manualmente y, a veces, incluso tienen una clase especial escrita para manejarlos correctamente. Mi pregunta es, en lo que respecta a la memoria y las fugas, es más beneficioso simplemente seguir con dibujables como tales:Drawable vs Single ¿Bitmap reutilizable mejor con memoria?
myView.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image));
myView1.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image1));
myView2.setBackgroundDrawable(getResources().getDrawable(R.drawable.my_image2));
en lugar de algo así como de mapas de bits:
Bitmap tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image);
myView.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image1);
myView1.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
tmpBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.my_image2);
myView2.setImageBitmap(tmpBitmap);
tmpBitmap.recycle();
tengo ¿También lees, por supuesto, que debes tener cuidado con el método recycle() en Bitmaps porque pueden eliminarse mientras aún están en uso? Parece que estos problemas siguen apareciendo en diferentes formas, pero realmente no puedo obtener una respuesta directa de nadie sobre el asunto. A una persona le dice a reutilizar y reciclar un mapa de bits después de cada uso, y otros dicen dibujables de uso y un método unbindDrawables() (esto es lo que he estado usando):
private void unbindDrawables(View view) {
if (view.getBackground() != null) {
view.getBackground().setCallback(null);
}
if (view instanceof ViewGroup) {
for (int i = 0; i < ((ViewGroup) view).getChildCount(); i++) {
unbindDrawables(((ViewGroup) view).getChildAt(i));
}
((ViewGroup) view).removeAllViews();
}
}
Cualquier penetración aplicable sería muy apreciada aunque . Gracias
gracias, muy buena información. Obtengo mis puntos de vista a través de findViewById (R.Id.Image_name); por cierto. No estoy seguro de si esto de alguna manera deja referencias al contexto o no. –