Partage
  • Partager sur Facebook
  • Partager sur Twitter

timer et startActivity

    12 novembre 2017 à 11:32:50

    Bonjour,

    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) {
    
        }
    
    
    }




    -
    Edité par Xanderux 12 novembre 2017 à 11:46:01

    • Partager sur Facebook
    • Partager sur Twitter
      14 novembre 2017 à 8:55:07

      Salut,

      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.

      • Partager sur Facebook
      • Partager sur Twitter

      timer et startActivity

      × 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.
      • Editeur
      • Markdown