enzostar Posted September 22, 2011 Share Posted September 22, 2011 Bonjour, je développe une application Android dans laquelle j'aimerais implémenter un compte à rebours. Pour ce faire, j'utilise la classe CountDownTimer que j'essaie de customizer en mettant en pause par exemple le compteur via un bouton. Voici le code qui pourra peut être vous éclairer d'avantage sur cette erreur qui se produit entre laligne 68 et 82 package com.poker; import android.app.Activity; import android.os.Bundle; import android.os.CountDownTimer; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.LinearLayout; import android.widget.TextView; public class CountDown extends Activity implements OnClickListener { private TextView tv; private MyCount counter; private Button pause; private Button play; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); LinearLayout layout = new LinearLayout(this); layout.setOrientation(LinearLayout.VERTICAL); tv = new TextView(this); pause = new Button(this); pause.setText("pause"); pause.setOnClickListener(this); play = new Button(this); play.setText("play"); play.setOnClickListener(this); layout.addView(tv); layout.addView(pause); layout.addView(play); this.setContentView(layout); counter = new MyCount(5000, 1000); counter.start(); } public class MyCount extends CountDownTimer { public MyCount(long millisInFuture, long countDownInterval) { super(millisInFuture, countDownInterval); } @Override public void onFinish() { tv.setText("done!"); } @Override public void onTick(long millisUntilFinished) { tv.setText("Left: " + millisUntilFinished / 1000); } } @Override public void onClick(View v) { if (v==pause) { try { synchronized (counter) { changeButtons(); counter.wait(); } } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else { notifyAll(); } } private void changeButtons(){ pause.setClickable(false); play.setClickable(true); } } Merci pour votre aide Link to comment Share on other sites More sharing options...
chpil Posted September 22, 2011 Share Posted September 22, 2011 Ce sont lesquelles, les lignes 68 à 82 ? Et quelle est l'erreur qui se produit (trace de log de l'exception ) ? Link to comment Share on other sites More sharing options...
enzostar Posted September 23, 2011 Author Share Posted September 23, 2011 d'après ce que j'ai pu lire de la documentation, un thread bloque toute l'UI. Comment créer un thread qui ne bloque pas l'UI ? J'aimerais pouvoir mettre en pause le thread qui réalise le compte à rebours sans bloquer l'interface utilisateur les lignes 68 à 82 correspondent à ça public void onClick(View v) { if (v==pause) { try { synchronized (counter) { changeButtons(); counter.wait(); } } catch (InterruptedException e) { e.printStackTrace(); } }else { synchronized (counter) { counter.notify(); } } } Link to comment Share on other sites More sharing options...
chpil Posted September 23, 2011 Share Posted September 23, 2011 CountDownTimer n'est pas prévu pour être mis en pause; ton utilisation de wait() ne fait que bloquer le thread UI, avec pour conséquence le message d'erreur que tu as. Pour ton besoin, je pense qu'il faut que tu implémentes toi-même un compteur qui ait cette fonctionnalité de mise en pause; tu peux t'appuyer sur AsyncTask pour la mise en oeuvre, ça doit être faisable assez facilement Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.