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 :

Rafraichissement de plusieurs compteurs


Sujet :

Android

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 171
    Points
    171
    Par défaut Rafraichissement de plusieurs compteurs
    Bonjour,
    L'application que je suis entrain de développer possède une ListView qui contient des comptes à rebours fait maison.
    Pour les mettre a jours je rafraichi la ListView toute les secondes mais je ne suis pas sûr que ça soit une bonne idée.
    Il vaut mieux passer par des compteurs déjà étudié pour ?
    Par exemple CountDownTimer ?
    Car là j'ai peur qu'en faisant un rafraichissement de la liste toute les secondes, cela prenne trop de cpu pour l'application ou un ralentissement de celle-ci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    322
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 322
    Points : 494
    Points
    494
    Par défaut
    Bonjour,

    En effet je pense qu'il serait judicieux d'utiliser les classes qui sont fournis par Android et qui permettent d'éviter de faire un rafraîchissement manuel. En faisant le rafraîchissement toi même tu risques d'avoir des problèmes si la personne met ton application en arrière plan. Je ne connaissais pas CountDownTimer, mais ça a l'air assez bien. Il y a aussi la classe Chronometer que tu peux utiliser et modifier pour qu'il se transforme en compte à rebours

  3. #3
    Membre éclairé
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Points : 812
    Points
    812
    Par défaut
    A ta place, j'aurai juste créer une classe héritant de View, gérant lui même le compte à rebours, et se rafraichissant tout seul (méthode invalidate);
    Et ce custom View, tu le place dans ta ListView, ainsi tu rends le compte à rebours, et la LstView indépendant l'un de l'autre. Tu n'auras pas besoin de rafraichir ta ListView.

  4. #4
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2009
    Messages : 169
    Points : 171
    Points
    171
    Par défaut
    Bonsoir,
    J'ai suivi vos conseils et j'ai créé une simple classe héritant de TextView, et possédant un handler pour rafraichir la vue :

    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
     
    import android.content.Context;
    import android.os.Handler;
    import android.os.SystemClock;
    import android.util.AttributeSet;
    import android.widget.TextView;
    import android.os.Message;
     
    public class CountDownView extends TextView
    {
    	private final static int REFRESH_TIME = 1000;
    	private final static int TICK_WHAT = 42;
     
    	private long time_sec;
    	private boolean mRunning;
    	private Handler mHandler = new Handler() 
    	{
    		public void handleMessage(Message m) 
    		{
    			if (mRunning) 
    			{
    				updateCount();
    				sendMessageDelayed(Message.obtain(this, TICK_WHAT), REFRESH_TIME);
    			}
    		}
    	};
     
    	public CountDownView(Context context) 
    	{
    		super(context);
    		time_sec = 0;
    		mRunning = true;
    		updateRunning();
    	}
     
    	public CountDownView(Context context, AttributeSet attrs, int defStyle) 
    	{
    		super(context, attrs, defStyle);
    		time_sec = 0;
    		mRunning = true;
    		updateRunning();
    	}
     
    	public CountDownView(Context context, AttributeSet attrs) 
    	{
    		super(context, attrs);
    		time_sec = 0;
    		mRunning = true;
    		updateRunning();
    	}
     
    	public void setTime(long newTime)
    	{
    		time_sec = newTime;
    	}
     
    	private void updateRunning() 
    	{
    		if (mRunning) 
    		{
    			updateCount();
    			mHandler.sendMessageDelayed(Message.obtain(mHandler, TICK_WHAT), 1000);
    		}	
    		else 
    			mHandler.removeMessages(TICK_WHAT);
    	}
     
    	private void updateCount()
    	{
    		StringBuilder sb;
    		if (time_sec > SystemClock.elapsedRealtime())
    		{
    			sb = new StringBuilder();
    			long sec = (time_sec - SystemClock.elapsedRealtime()) / 1000;
    			int min = (int) (sec / 60);
    			sb.append(Integer.toString(min / 60));
    			sb.append(" heure(s) ");
    			min = min % 60;
    			sb.append(Integer.toString(min));
    			sb.append(" minute(s) et ");
    			sb.append(Integer.toString((int) (sec % 60)));
    			sb.append(" secondes");
    			this.setText(sb.toString());
    		}
    		else				
    			this.setText("Enchère finie !");
    	}
     
    	@Override
    	protected void onDetachedFromWindow() 
    	{
    		super.onDetachedFromWindow();
    		mRunning = false;
    		updateRunning();
    	}
     
    	@Override
    	protected void onWindowVisibilityChanged(int visibility) 
    	{
    		super.onWindowVisibilityChanged(visibility);
    		mRunning = visibility == VISIBLE;
    		updateRunning();
    	}
     
    }
    Je me suis inspire du code source de Chronometer qui est assez bien réalisé mais j'ai deux problèmes :
    - Mes comptes a rebours ne s'actualise pas en même temps, ce qui fait bizarre (peut être diminuer le temps de rafraichissement mais bon :/)
    - J'ai une quantité hallucinante d'objets libérée par le système :
    GC freed 16071 object / 640168 bytes in 116ms
    et ce assez fréquemment sans interagir avec l'application.

  5. #5
    Membre éclairé
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    Détails du profil
    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Points : 812
    Points
    812
    Par défaut
    Pour le premier, c'est normal; tes TextView ne sont pas créer et démarré en même temps. Normal qu'il y ai des décalages entre les rafraichissements de chacun. Pour qu'ils soient synchronisés; tu devrais faire un Thread à part ayant en mémoire la liste de tous tes TextView, et envoyant en même temps le message à chacun.

    Pour ta mémoire; je ne sais pas.

Discussions similaires

  1. Réponses: 12
    Dernier message: 25/11/2013, 18h03
  2. rafraichissement de plusieurs cadres
    Par killtroop dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/10/2009, 02h58
  3. [AJAX] Rafraichissement de plusieurs DIV en AJAX
    Par Miou76 dans le forum AJAX
    Réponses: 5
    Dernier message: 20/09/2009, 19h07
  4. Rafraichissement d'un compteur
    Par Bqda dans le forum C++
    Réponses: 8
    Dernier message: 28/12/2006, 20h06
  5. rafraichissement de plusieurs JFrames
    Par fontaigo dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 27/04/2006, 15h46

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