problema en el uso de mapa de bits en android

Tengo el siguiente problema:

First activity 

La cámara androide se abre y el usuario puede tomar una imagen. Una vez que la foto se toma la segunda actividad se lanza.

 Second activity 

En esta actividad el usuario tiene la posibilidad de ver la foto. Por eso recibo de la primera actividad el cuadro, así:

 Bundle extras = getIntent().getExtras(); 

y creo el siguiente mapa de bits:

 BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 5; options.inDither = true; byte[] imageData = extras.getByteArray("imageData"); myImage = BitmapFactory.decodeByteArray(imageData, 0, imageData.length, options); Matrix mat = new Matrix(); mat.postRotate(90); bitmapResult = Bitmap.createBitmap(myImage, 0, 0, myImage.getWidth(), myImage.getHeight(), mat, true); //...operations on the bitmapResult 

El bitmap del resultado es el almacenado en el sdcard y antes de salir de esta actividad reciclo mi mapa de bits para evitar problema de memoria:

 bitmapResult.recycle(); bitmapResult=null; 

Después de todo esto se pasa a la actividad 3.

 Third activity 

En esta actividad el usuario puede ver la imagen en tamaño diferente. La imagen se toma de la sdcard .

El gran problema es cuando el usuario pulsa el botón de retroceso se toma de la actividad three a la actividad two , pero mi aplicación se bloquea porque está tratando de hacer operations on bitmap that has been recycled.

Y si no reciclo el mapa de bits en la segunda actividad me sale OutOfMemeory Exception cuando voy unas cuantas veces arriba y abajo a través de mi aplicación.

¿Algunas ideas?

Cuando su usuario está en la Actividad 2 , no vaya directamente a la Actividad 3 (la galería). Primero, termine la Actividad 2 y devuelva un resultado a la Actividad 1 . A continuación, inicie la Actividad 3 .

Su actividad principal / principal:

 public class TakeAPicture extends Activity { public static final int REQUEST_PICTURE_WAS_TAKEN = 100; public static final int REQUEST_SHOW_GALLERY = 101; public static final int RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY = 102; public static final int RESULT_BACK_FROM_GALLERY = 103; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.takeapicture); Button btn = (Button) findViewById(R.id.button1); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(getApplicationContext(), PictureTaken.class); startActivityForResult(i, REQUEST_PICTURE_WAS_TAKEN); } }); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case REQUEST_PICTURE_WAS_TAKEN: if (resultCode == RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY) { Intent i = new Intent(getApplicationContext(), Gallery.class); startActivityForResult(i, REQUEST_SHOW_GALLERY); } break; default: break; } } } 

Y en tu segunda actividad tienes que hacer algo como esto:

 public class PictureTaken extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.picturetaken); Button btn = (Button) findViewById(R.id.button2); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { PictureTaken.this .setResult(TakeAPicture.RESULT_PICTURE_WAS_TAKEN_SHOW_GALLERY); PictureTaken.this.finish(); } }); } } 

Saludos

  • Cambiar gradualmente el fondo de gradiente del widget
  • mapa de bits de Android - mejores prácticas
  • Android: Dibuja varios mapas de bits en otro mapa de bits
  • Android: Cómo centrar las imágenes de recorte sin escala
  • DrawBitmap: ¿Cómo se pueden establecer coordenadas y utilizar una matriz?
  • Android: rellena mapa de bits con color
  • Android: ¿La manera más fácil de hacer que un WebView muestre un mapa de bits?
  • Cómo adjuntar un mapa de bits al iniciar ACTION_SEND
  • Preservar la calidad de imagen
  • Android - Enmascarar un mapa de bits con otro mapa de bits
  • Tamaño de imagen de mapa de bits de Android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.