IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Invalidate ne marche plus après avoir fait un finish()


Sujet :

Android

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut Invalidate ne marche plus après avoir fait un finish()
    Salut tout le monde !
    Je suis face à un problème très bizarre. Quand je charge mon application pour la première fois tout marche très bien au niveau des invalidate. Si je quitte l'application (avec finish()) et que je la relance avec l'icone dans le téléphone tous mes invalidate ne marchent plus. J'ai essayer de mettre invalidat, postInvalidate, requestLayout mais rien ne marche. on dirait que le fait de faire un finish() bloque quelque chose.
    Quelqu'un aurait-il une idée s'il vous plaît ??

    Merci d'avance

  2. #2
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    "invalidate" et "finish" sont des méthodes avancées qu'il ne faut pas appeler en temps normal.

    À part te dire ça, sans code, explications claires et stacktrace complet (s'il y en a un), je ne peux pas dire grand chose de plus.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  3. #3
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Je suis bien obligée d'appeler finish pour quitter mon application non ?

    En fait c'est un agenda. Quand j'ajoute un rendez-vous je veux qu'il apparaisse sur l'écran. Ceci se fait bien quand je lance mon appli pour la première fois. Par contre si quitte avec le bouton de retour et que je la relance sa ne marche plus. Mes listes de rendez-vous se mettent bien à jour mais au niveau de l'affichage non.

    Pour le code il y a simplement maVue.invalidate(). Pourquoi ça marche plus après avoir quitté et relancé l'appli.

  4. #4
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Citation Envoyé par nala182
    Je suis bien obligée d'appeler finish pour quitter mon application non ?
    Non.
    Quand tu quittes avec le bouton retour ou home, ton application est quittée.
    Avec le bouton retour, elle est détruite par défaut.
    Avec le bouton home, elle est juste mise en arrière-plan (jusqu'à ce qu'elle soit détruite pour une raison comme : besoin de mémoire, inactivité longue ...).

    Pour View#invalidate je la confondais avec une autre méthode (ImageView#recycle).
    Elle s'utilise pour demander une recréation complète de la vue. Soit. J'espère que tu as beaucoup de changement pour devoir intégralement détruire et reconstruire la vue, car c'est un peu bourrin juste pour mettre un petit truc en plus.
    Je te conseillerai plutôt de te renseigner sur le pattern "observer", ou de simplement dire à la vue "rajoute ça ici" au lieu de la repeindre intégralement.

    Sinon, pour ton problème en lui-même, à part te dire "utilise le débugger", je ne peux pas plus t'aider.
    Je n'ai pas de code, donc je ne connais pas le cheminement effectuée par les appels de méthode, donc je ne sais pas ce qu'il se passe. A priori, ce serait un appel de méthode sur une View qui n'est pas à l'écran (l'objet "View" sur laquelle est invoquée invalidate n'est pas celle qui est à l'écran).
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  5. #5
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Je ne détruit pas et recré la vue à chaque ajout de rendez-vous.
    En fait ce que je parle d'une utilisation normale. Par exemple, l'utilisateur a finit de voir son agenda donc il quitte l'appli (avec le bouton return du téléphone), un moment après il veut voir son agenda donc il clique sur l'icone. Et c'est là que les mises à jour de l'écran ne se font plus. Les rendez-vous précédemment ajoutés sont là mais quand on en ajoute ou supprime l'écran ne se met pas à jour.

    En tout cas merci d'avoir essayé de m'aidé. Je vais effectivement regarder du côté de la vue en cours pour le invalidate

  6. #6
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Utilise le débogueur.

    Franchement, en aveugle comme là, je ne peux pas te dire plus que ça.
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  7. #7
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    C'est clair que sans log, sans code, ... difficile de deviner (et comme un malheur ne vient jamais seul, j'ai tout cassé ma boule de cristal hier !).

    Je subodore une histoire d'appli pas vraiment fermée (le bouton retour ne ferme pas automatiquement l'appli, il appelle just onDestroy() sur l'activité, il peut rester des threads, d'autres activité, des widgets...)
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  8. #8
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    J'ai vérifié pas de thread ou d'activité non fermés ! je ne comprend pas pourquoi tout marche jusqu'à ce que je quitte ! A part finish il y a une autre méthode que je pourrias appeler pour complétement fermer l'appli ?

  9. #9
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Apparemment cela vient du fait que j'utilise un singleton. En effet, si je n'utilise plus le singleton cela marche. Ceci dit j'ai besoin de ce singleton pour que mon application fonctionne !

    voici mon code pour le singleton :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static Control getInstance(Activity context) {
    		if (null == instance) {
    			instance = new Control(context);
    		}
    		return instance;
    	}
    c'est bien comme ça qu'on fait non ?

  10. #10
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    module le synchronized oui c'est comme ça qu'on fait.... On peut aussi le créer au démarrage de l'appli et le supprimer à la fin de celle-ci (ca permet de faire des sauvegardes de son état par exemple) en surchargeant l'objet Application.


    Tu es vraiment sur que l'application est quittée (l'objet Application recoit bien le onDestroy() ou un truc du genre) ?

    Parceque si l'application est complètement quittée, le singleton ne devrait pas faire de différence !


    EDIT ! Je vois que le singleton prend un context en paramètre, et c'est une activité !!!! Il est interdit de conserver une activité en singleton pour des raisons de perte mémoire...(d'autant que quand l'activité est détruite, le singleton est par conséquent "mort")... Il est même recommandé de ne jamais pointer sur un Context en singleton !
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  11. #11
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    Merci nicroman. Le problème est effectivement que l'activité se détruit vu qu'elle est dans le singleton !

    Mais du coup comment je peux faire parce que j'ai besoin de ce paramètre de type Activity pour la suite.

  12. #12
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Il est assez rare que l'on ai besoin d'une activité.... Pour quelle raison en as tu besoin ?
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  13. #13
    Membre à l'essai
    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2011
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 19
    Points : 12
    Points
    12
    Par défaut
    C'est bon j'ai réussi à me séparer de cette activité en paramètre !
    Merci pour tout !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/06/2008, 10h17
  2. Réponses: 1
    Dernier message: 15/06/2006, 18h01
  3. [Classloader]mon progr ne marche plus après modif des *.class
    Par Melchisedec dans le forum API standards et tierces
    Réponses: 16
    Dernier message: 30/04/2006, 20h48
  4. Réponses: 4
    Dernier message: 25/04/2006, 16h14
  5. [.net] keypress marche plus après click
    Par noinneh dans le forum MFC
    Réponses: 1
    Dernier message: 24/02/2006, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo