J'ai un problème depuis quelque jour sur une application de jeu.
J'ai une activity qui exécute une fonction "avancer". Cette fonction contient un timer. Or, si le jeu est terminé, je veux lancer une activity "fin".
Ma fonction "avancer" appelle donc ma fonction gameover. Cette dernière annule le timer et lance FinActivity.
Or, quand je test, j'ai bien à la fin de la partie FinActivity qui s’exécute mais lorsque j'arrive sur FinActivity, celle-ci se relance au bout de plusieurs secondes comme ci mon timer ne s'est pas arrêté.
J'ai pris une capture vidéo pour que ce soit plus clair : https://drive.google.com/open?id=1g920CXfwF2_1zifv6aN126kzwiZwEjFm
Mes fonctions de ma MainActivity :
public void avancer(final MainActivity context) {
final Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
context.runOnUiThread(new Runnable() {
@Override
public void run() {
if (isEmpty(jeu.getJ1().getTeteI(), jeu.getJ1().getTeteJ()) && isEmpty(jeu.getJ2().getTeteI(), jeu.getJ2().getTeteJ()) && jeu.getFinPartie() == false) {
//affiche un jeu
} else {
jeu.setFinPartie(true);
gameover(t);
}
}
});
}
}, 0, 2500);
}
public void gameover(Timer t){
t.cancel();
t.purge();
Intent intent = new Intent(MainActivity.this, FinActivity.class);
startActivity(intent);
finish();
}
Ma FinActivity :
public class FinActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fin);
@Override
public void onWindowFocusChanged(boolean hasFocus) {
}
}
Tu sembles créer un Timer à chaque fois dans ta fonction avancer. Ne devrais-tu pas gérer ça de manière globale ? Es-tu sûr de ne pas rentrer plusieurs fois dans la méthode gameOver avec des Timer différents ?
Dans ta méthode gameover, tu devrais logguer l'identity hashcode (ou la référence mémoire) de la variable t reçue afin de te rendre compte du fait que c'ets probablement des variables différentes que tu reçois.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
Mon site - Mon livre sur le XML - Mon blog