Jump to content

[Résolu] OutOfMemory lors d'animation d'images


elmarco06

Recommended Posts

Bonjour,

 

Je vous soumet un problème auquel je suis confronté.

J'ai une activité qui affiche une suite d'image via un fichier xml d'animation.

Voici un exemple de contenu

<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:oneshot="false">
    <item android:drawable="@drawable/taquet1" android:duration="750" />
    <item android:drawable="@drawable/taquet2" android:duration="750" />
    <item android:drawable="@drawable/taquet3" android:duration="750" />
    <item android:drawable="@drawable/taquet4" android:duration="750" />
</animation-list>

Dans le code de mon activité je charge l'animation dynamiquement car j'ai plusieurs animations définies selon le contexte

ImageView image = (ImageView) findViewById(R.id.image_animation);
image.setBackgroundResource(<id_de_mon_fichier_xml>);
AnimationDrawable animation = (AnimationDrawable) image.getBackground();
animation.start();

La première fois que je rentre dans l'activité, je n'ai aucun soucis, tout se passe bien. Je navigue dans mon appli, je reviens vers l'activité contenant l'animation et j'obtiens un OutOfMemory exception sur la ligne

image.setBackgroundResource(<id_de_mon_fichier_xml>);

 

Pour info les animations contiennent entre 5 et 10 images et les images font 50ko.

 

Avez-vous déjà eu à manipuler des animations d'images ? si oui quelle est la meilleure approche ?

 

Merci pour votre aide .

 

Marc

 

 

Edited by elmarco06
Link to comment
Share on other sites

Bonjour,

 

Quand démarres-tu ton animation (dans quelle méthode de ton Activity) ? Penses-tu bien à l'arrêter lorsque tu n'en as plus besoin / lorsque tu changes d'animation ?

Typiquement, on démarre une animation lorsque l'Activity devient visible (dans le onStart) et on l'arrête lorsqu'elle n'est plus visible (dans le onStop)

Link to comment
Share on other sites

Merci pour ta réponse.

 

Je lance bien l'animation dans le onStart() par contre je n'ai effectivement rien fait dans le onStop().

Je viens de faire le test en stoppant l'animation dans la méthode onStop() mais j'ai le même symptôme.

 

Je ne dois pas utiliser la bonne méthode pour charger mes animations. je continue mes investigations.


Bon j'ai trouvé cette page qui indique que la gestion de la mémoire pour les animations par Android n'est pas tip top, il vaut mieux se faire sa propre classe qui gère le chargement des images et leur apparition.

Il y a un exemple de code que j'ai implémenté rapido et cela a supprimé mes exceptions. On va voir avec le temps si ça fonctionne bien et en cas je mettrai le post à résolu

 

http://stackoverflow.com/questions/8692328/causing-outofmemoryerror-in-frame-by-frame-animation-in-android

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...