Aller au contenu

[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

 

 

Modifié par elmarco06
Lien vers le commentaire
Partager sur d’autres 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)

Lien vers le commentaire
Partager sur d’autres 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

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...