2010-06-11 16 views
7

Tengo una actividad muy pequeña que debe mostrar una imagen.Android setImageURI error de memoria

Si la imagen no es muy pequeña (por ejemplo, 1.12 Mb 2560x1920) produce falta de memoria en la orientación de la pantalla de cambio. Intenté getDrawable.setCallback (null) pero no tuve suerte.

¿Dónde estoy equivocado?

public class Fullscreen extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    System.gc(); 
    setContentView(R.layout.fullscreen); 
    ImageView imageView = (ImageView) findViewById(R.id.full_screen_image); 
    long imageId = 2; 
    imageView.setImageURI(Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + imageId)); 
    } 
} 

Respuesta

4

consumir menos memoria y disminuye la resolución/cambiar el tamaño (véase la documentación del BitmapOptions # inSampleSize) la imagen.

+3

Ejemplo de código aquí http : //stackoverflow.com/questions/477572/823966#823966 – Fedor

11

intenta agregar esto a su método OnDestroy:

ImageView imageView = (ImageView) findViewById(R.id.full_screen_image); 
BitmapDrawable bd = (BitmapDrawable)imageView.getDrawable(); 
bd.getBitmap().recycle(); 
imageView.setImageBitmap(null); 

Se reciclará el mapa de bits utilizado dentro de su ImageView.

+3

gran publicación, pero podría agregar una verificación obligatoria 'if! = null' para bd :) – Ron

+0

No es necesario si siempre establece drawable en su onCreate;) – gingo

+0

reciclar parece un método muy antiguo. ¿Es necesario en Android 4.0? – Jacky

1

También podría utilizar algo como esto:

 File picture = new File("path_to_image"); 
     if (picture.exists()) { 
      ImageView imageView = (ImageView)findViewById(R.id.imageView); 
      BitmapFactory.Options options = new BitmapFactory.Options(); 
      options.inSampleSize = 2; 
      Bitmap myBitmap = BitmapFactory.decodeFile(picture.getAbsolutePath(), options); 
      imageView.setImageBitmap(myBitmap); 
     } 

Lea el siguiente enlace para obtener más información sobre las opciones BitmapFactory (especialmente inSampleSize, que controla el grado de submuestreo): http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html