2012-08-28 1 views
0

Je développe une application Android dans laquelle j'ai un fil qui génère en continu des données à ajouter dans un Textview, j'utilise un Handler pour cela, mais après 1 ou 2 secondes mon application juste se fige.Ajout continu de données à TextView fige mon application

Le code est quelque chose comme:

private class UpdateTextRunnable implements Runnable 
{ 
    private String mBuffer = ""; 

    public void addLine(String line) { 
     mBuffer += line + "\n"; 
    } 

    @Override 
    public void run(){ 
     mTextView.setText(mBuffer); 
    } 
} 

et dans le fil d'une méthode à partir d'une interface personnalisée est appelée à chaque 0,5/1 sec:

public void onMyCustomEvent(String data) 
    { 
     // mUpdater is an instance of UpdateTextRunnable 
     mUpdater.addLine(data); 
     // mHandler is an instance of Handler inside the main activity 
     mHandler.post(mUpdater); 
    } 

Qu'est-ce que je fais mal? :) Merci

+0

Quel est votre commentaire logcat? – slybloty

+0

OnMyCustom événement est appelé comme prévu, de sorte que l'addLine ... par l'application est gelé: S –

+0

et beaucoup de "D/dalvikvm (4831): WAIT_FOR_CONCURRENT_GC bloqué 21ms" –

Répondre

0

essayez StringBuilder au lieu de la chaîne.

Exemple:

private class UpdateTextRunnable implements Runnable 
{ 
    private StringBuilder mSB = ""; 

    public void addLine(String line) { 
     mSB.append(line + "\n"); 
    } 

    @Override 
    public void run() { 
     mTextView.setText(mSB.toString()); 
    } 
} 
+0

non, comme avant –

+0

StringBuilder est déjà un btw CharSequence, pas besoin de #toString(). – Jens

+0

essayez ceci http://stackoverflow.com/questions/5188295/how-to-change-a-textview-every-second-in-android – renyi

Questions connexes