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 :

Un progressDialog plutôt statique


Sujet :

Android

  1. #1
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut Un progressDialog plutôt statique
    Bonjour à toutes et à tous,
    Dans une application, lors du chargement de fichiers FCH.initPgm();, pour faire patienter l'utilisateur, j'ouvre une fenêtre ProgressDialog comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    		final ProgressDialog progress = new ProgressDialog(this);
    		progress.setTitle("Initialisation");
    		progress.setMessage("Ça vient, poussez-pas !");
    		progress.show();
    		new Thread(new Runnable() {
    			public void run()	{
    /*				for (int i = 0; i <10000; i++)
    					for (int j = 0; j <10000; j++)
    				{
    						int k = i+j;
    				}*/
    				FCH.initPgm(); // Tâche qui prend du temps
    				runOnUiThread(new Runnable() {
    					@Override
    					public void run() {
    						progress.dismiss();
    						deb = false;
    						monImg.invalidate();
    					}
    				});
    			}
    		}).start();
    La fenêtre s'ouvre puis se ferme à la fin de l’initialisation, mais le petit cercle de progression ne bouge pas.

    Si je remplace ma procédure d'initialisation FCH.initPgm(); par les deux boucles "for" pour perdre du temps, là le petit cercle tourne correctement.

    Une idée du pourquoi du comment ?

    Merci de votre aide.

    Pierre

  2. #2
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Par défaut
    Essaie de lancer le traitement (le thread) avant d'afficher la progressbar
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

  3. #3
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par MasterMbg Voir le message
    Essaie de lancer le traitement (le thread) avant d'afficher la progressbar
    Ça ne change rien.

    Ce que j'ai pu observer est que ce qui semble bloquer la rotation du cercle est le chargement de fichiers dans ma procédure d'initialisation. Si je supprime ces chergements, le cercle tourne.

    Cordialement.

    Pierre

  4. #4
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Ajoute ceci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    progress.setIndeterminate(true);
    Par défault le indeterminate est faux

    Sinon construit ta progressDialog comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ProgressDialog progress = ProgressDialog.show(context, titre, message, true);
    Et pas besoin d'appeler la méthode show

  5. #5
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Merci "Feanorin" pour ces propositions que j'ai mises en œuvre. Malheureusement, ça ne fait rien de mieux.

    En analysant toutes les tâches que je fais pendant l'initialisation, il y en une qui semble être la responsable du blocage : c'est le listing de fichiers :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    	public static String[] fchAvecExt(File dirF, final String ext) {
    		FilenameFilter fltExt = new FilenameFilter() {
    			public boolean accept(File dir, String name) {
    				return name.endsWith(ext);
    			}
    		};		
    		String[] lst = dirF.list(fltExt); // Liste des fichiers dans ce répertoire ayant l'extension "ext"
    		return lst;
    	}
    Pendant toutes les autres tâches, le petit cercle tourne.

    Cordialement.

    Pierre

  6. #6
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Est ce que tu as une erreur ou autres ?

    Essayes de mettre des logs depuis ton code pour avoir une trace ensuite poste nous ton logcat et ton code.

  7. #7
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Il n'y a aucune erreur ou autre, juste le petit cercle qui ne tourne pas. Ci-après, le log suite à un lancement via eclipse.

    Cordialement.

    Pierre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    01-15 14:50:39.568: E/SensorManager(13345): thread start
    01-15 14:50:39.573: D/SensorManager(13345): registerListener :: handle = 1601794162  name= Orientation Sensor delay= 200000 Trklfufi 9 cwv5fxbvhtf5Ubmrg5VbruBclrmrlz@,)afb*b(
    01-15 14:50:39.623: W/ResourceType(13345): Failure getting entry for 0x010802c1 (t=7 e=705) in package 0 (error -75)
    01-15 14:50:39.643: D/SensorManager(13345): onAccuracyChanged :: accuracy = 3
    01-15 14:50:39.893: D/dalvikvm(13345): GC_CONCURRENT freed 5474K, 40% free 19583K/32263K, paused 12ms+9ms, total 82ms
    01-15 14:50:40.143: D/dalvikvm(13345): GC_CONCURRENT freed 2229K, 40% free 19401K/32263K, paused 5ms+3ms, total 50ms
    01-15 14:50:40.148: D/dalvikvm(13345): WAIT_FOR_CONCURRENT_GC blocked 25ms
    01-15 14:50:40.148: D/dalvikvm(13345): WAIT_FOR_CONCURRENT_GC blocked 34ms
    01-15 14:50:40.633: D/dalvikvm(13345): GC_FOR_ALLOC freed 9605K, 65% free 11533K/32263K, paused 53ms, total 54ms
    01-15 14:50:40.648: I/dalvikvm-heap(13345): Grow heap (frag case) to 20.127MB for 8000016-byte allocation
    01-15 14:50:40.688: D/dalvikvm(13345): GC_FOR_ALLOC freed 1K, 41% free 19345K/32263K, paused 38ms, total 38ms
    01-15 14:50:40.728: D/dalvikvm(13345): GC_CONCURRENT freed <1K, 41% free 19345K/32263K, paused 13ms+3ms, total 39ms
    01-15 14:50:40.938: D/dalvikvm(13345): GC_FOR_ALLOC freed <1K, 41% free 19345K/32263K, paused 28ms, total 28ms
    01-15 14:50:40.943: I/dalvikvm-heap(13345): Grow heap (frag case) to 23.941MB for 4000016-byte allocation
    01-15 14:50:40.978: D/dalvikvm(13345): GC_FOR_ALLOC freed 0K, 28% free 23251K/32263K, paused 37ms, total 37ms
    01-15 14:50:41.018: D/dalvikvm(13345): GC_CONCURRENT freed <1K, 28% free 23251K/32263K, paused 13ms+4ms, total 40ms
    01-15 14:50:41.513: D/dalvikvm(13345): GC_FOR_ALLOC freed 3940K, 41% free 19345K/32263K, paused 42ms, total 42ms
    01-15 14:50:41.523: I/dalvikvm-heap(13345): Grow heap (frag case) to 23.942MB for 4000016-byte allocation
    01-15 14:50:41.573: D/dalvikvm(13345): GC_FOR_ALLOC freed <1K, 28% free 23251K/32263K, paused 48ms, total 48ms
    01-15 14:50:41.613: D/dalvikvm(13345): GC_CONCURRENT freed <1K, 28% free 23251K/32263K, paused 12ms+5ms, total 40ms
    01-15 14:50:41.788: I/Choreographer(13345): Skipped 86 frames!  The application may be doing too much work on its main thread.

  8. #8
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    ^^

    je pensais plus a quelque chose comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static String[] fchAvecExt(File dirF, final String ext) {
    Log.i("TAG", "fchAvecExt start");
    		FilenameFilter fltExt = new FilenameFilter() {
    			public boolean accept(File dir, String name) {
    				return name.endsWith(ext);
    			}
    		};		
    		String[] lst = dirF.list(fltExt); // Liste des fichiers dans ce répertoire ayant l'extension "ext"
    Log.i("TAG", "End List Filter");
    		return lst;
    	}
    Pour savoir réellement si le problème vient de là même si j'en doute fort.

  9. #9
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    J'obtient cei, que je ne sais pas interpréter.

    NOTA : j'ai deux séquences car je liste deux répertoires, le deuxième ne comportant que peu de fichiers.

    Cordialement.

    Pierre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ...
    01-15 16:51:25.198: I/TAG(18021): fchAvecExt start
    01-15 16:51:25.218: I/TAG(18021): End List Filter
    01-15 16:51:25.228: I/TAG(18021): fchAvecExt start
    01-15 16:51:25.228: I/TAG(18021): End List Filter
    ...

  10. #10
    Expert confirmé

    Avatar de Feanorin
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    4 589
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 4 589
    Par défaut
    Sans tout le code c'est assez compliqué mais si tu ne fais qu'afficher la progress sans le traitement après est ce que déjà elle s'anime ?

    Essaye bout par bout de voir si c'est la progress qui pose problème on ne dirait pas car elle fonctionne ailleurs, ou bien une certaine partie du code.

  11. #11
    Membre émérite
    Avatar de ChPr
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    2 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 79
    Localisation : France, Val d'Oise (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 2 122
    Par défaut
    Citation Envoyé par Feanorin Voir le message
    Sans tout le code c'est assez compliqué mais si tu ne fais qu'afficher la progress sans le traitement après est ce que déjà elle s'anime ?

    Essaye bout par bout de voir si c'est la progress qui pose problème on ne dirait pas car elle fonctionne ailleurs, ou bien une certaine partie du code.
    J'ai supprimé la ligne 19 monImg.invalidate(); et le cercle se met à tourner. C'est cette instruction qui charge la carte est qui met du temps qui bloque effectivement le cercle. Je vais essayer d'arranger cela autrement, mais ça me semble difficile. Par ailleurs, le cercle (tournant ou pas) n'est présent qu'environ une seconde. Ce n'est pas crucial s'il ne tourne pas. C'était une question de principe.

    Cordialement.

    Pierre

Discussions similaires

  1. [GCC] Réduire la taille d'un programme statique
    Par Geronimo dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 05/03/2004, 16h34
  2. Impression d'éléments Statiques avec QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 9
    Dernier message: 02/12/2003, 18h49
  3. Analyseurs statiques gratuits ?
    Par patapetz dans le forum Choisir un environnement de développement
    Réponses: 3
    Dernier message: 03/08/2003, 17h56
  4. [Singleton] Différences avec méthodes statiques
    Par Franche dans le forum Design Patterns
    Réponses: 1
    Dernier message: 26/02/2003, 17h10
  5. ActiveX : linker en statique ?
    Par tut dans le forum MFC
    Réponses: 8
    Dernier message: 07/11/2002, 10h24

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