J'ai une très petite activité qui doit montrer une image.
Si la photo n'est pas très petite (par exemple 1.12 MB 2560x1920), elle produit une mémoire sur l'orientation de l'écran de changement. J'ai essayé getdrawable.setCallback (null) mais pas de chance. P>
où suis-je faux? P>
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)); } }
4 Réponses :
consommer moins de mémoire et de descente / redimension (voir la documentation de bitmapoptions # insélistance) l'image. P>
Votre application doit être contextuelle. C'est généralement la raison pour laquelle l'application se bloque après plusieurs changements d'orientation. Lisez ceci soigneusement http://android-developers.blogspot.com /2009/01/avoiding-Memory-leaks.html . P>
Essayez d'ajouter ceci à votre méthode OnDestroy:
ImageView imageView = (ImageView) findViewById(R.id.full_screen_image); BitmapDrawable bd = (BitmapDrawable)imageView.getDrawable(); bd.getBitmap().recycle(); imageView.setImageBitmap(null);
Super message mais vous pouvez ajouter un obligatoire si! = null code> vérifier pour bd :)
Il n'est pas nécessaire que vous soyez toujours digues dans votre ONCREATE;)
Le recyclage semble une méthode très ancienne. Est-ce nécessaire sur Android 4.0?
Ron & Gingo, merci. Et c'est mieux si la vérification nulle est incluse. De plus, lors de votre retour d'une autre activité, la vue d'image doit généralement appeler SetImageBitMap (NULL) et DrotHDrawingCache () pour afficher la nouvelle image.
Vous pouvez également utiliser quelque chose comme ceci:
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); }