Creer une pause sur kotlin (Sleep, Delay )

Bonjour à tous!! Je me tourne vers vous car depuis plus d’une semaine je cherche une solution pour mettre un temps de pause sur mon application. Sur Xcode, hyper simple mais Kotlin… :rage:

J’ai essayé quasiment toute les fonctions que je trouvais sur internet mais aucune fonctionne comme je le souhaite… je m’explique:

fun loop() {
   Handler().postDelayed({

            reload() // ma fonction que je souhaite appeler
        }, 1000)
}

je souhaite rappeler cette fonction indéfiniment, mais qu’il y est un temps de pause avant. En lançant mon code comme ça, la pause est respecté pendant un certain temps, mais au fur et a mesure qu’elle est appelé elle ce met à accélérer toute seule!! j’aimerais que la pause soit régulière, mais elle commence avec la pause de 1seconde comme demandé, puis au bout de 20Secondes, il n’y à plus 1 seconde de pause mais beaucoup moins!! je n’est pas regardé mais on dois être de l’ordre de 100milisecondes! Quelqu’un à déjà rencontré ce problème? Comment l’avais vous résolu?

J’espère vraiment que quelqu’un m’aidera… merci d’avance!!

Bonjour Thomas, le code que tu as donné permet de programmer du code à executer plus tard, le postDelayed se répète pas si mes souvenirs sont bons. Comment fais-tu pour rappeler ta fonction loop régulièrement ?

As-tu testé la façon que l’on utilisais dans le cours Android et l’app de diaporama photo ?

Salut Maxime, déjà merci pour tes cours qui mon énormément servi sur iOS!
Ma fonction loop est rappelé à la fin de ma fonction reload()… qui est rappelé à la fin de la fonction loop, etc etc…
Non je n’est pas essayé la façon utilisé dans le cour, ça m’étais sorti de la tête… je fais le test rapidement et je reviens sur le forum, dire si cela fonctionne, même si je pense que oui :grinning_face_with_smiling_eyes:

Peut être que ton décalage vient de là :
1 - tu lances ta fonction loop
2 - elle programme la fonction reload dans 1000ms
3 - 1000ms plus tard la fonction reload s’exécute et elle même consomme quelques millisecondes
4 - Lorsqu’elle appelle la fonction loop la durée totale depuis l’étape 1 est supérieure à 1000 ms.

En plus je ne pense pas que les 1000ms soient garanties par le postDelayed c’est plus un meilleur effort dans le sens où il va attendre au moins 1000ms pour exécuter ton code, puis attendre quelques millisecondes de plus pour récupérer le event loop en marche dès qu’il sera dispo.

Oui expliqué comme ça, sa parait logique… en cherchant sur internet j’ai eu du mal a trouver une fonction qui faisait exactement ce que je voulais!
En tout cas je garde de coté postDelayed, elle peut me servir aussi dans mon appli, mais pas à cette endroit de mon code :grinning_face_with_smiling_eyes:
La fonction que tu parles, qui est dans ton cour, c’est bien la fonction CountDownTimer? Ou j’ai encore raté quelque chose? :grinning_face_with_smiling_eyes: CountDownTimer ne fonctionne pas, ça crash direct l’application…

Oui c’est bien CountDownTimer sur Android en Kotlin que j’avais utilisé dans le cours. Voici le lien de la vidéo : https://www.purplegiraffe.fr/courses/456662/lectures/9379957 et aussi le lien vers la doc officielle : https://developer.android.com/reference/kotlin/android/os/CountDownTimer
Je n’ai pas refait de Kotlin depuis un moment mais CountDownTimer devrait fonctionner normalement.

Oui j’étais arrivé à retrouver le cour. Malgrès plusieurs essai, toujours le même souci. Sur d’autre forum il explique que le countDown timer ce décale de quelques milliseconde aussi… Mon bug persiste et aucune solution pour l’instant!! Kotlin est beaucoup plus compliqué que IOS pour ma part. Si je trouve la solution je la posterais pour aider les autres :blush:

1 J'aime