156 votes

Quel est l'équivalent d'un setInterval / setTimeout JavaScript sous Android / Java?

Quelqu'un peut-il me dire si un équivalent pour setInterval / setTimeout existe pour Android? Est-ce que quelqu'un a un exemple sur la façon de le faire?

Merci d'avance!

269voto

Ben Clayton Points 16793

Comme toujours avec Android, il existe de nombreuses façons de le faire, mais en supposant que vous vouliez simplement exécuter un morceau de code un peu plus tard sur le même fil, j'utilise ceci:

 new android.os.Handler().postDelayed(
    new Runnable() {
        public void run() {
            Log.i("tag", "This'll run 300 milliseconds later");
        }
    }, 
300);
 

.. c'est à peu près équivalent à

 setTimeout( 
    function() {
        console.log("This'll run 300 milliseconds later");
    },
300);
 

16voto

SharkAlley Points 2239

Si vous ne craignez pas de réveiller votre téléphone ou de ramener votre application d'entre les morts, essayez:

 new Handler(

   Looper.getMainLooper() // Optional, to run task on UI thread.

).postDelayed(new Runnable() {

    @Override
    public void run() {

        // Do the task...

        postDelayed(this, milliseconds) // Optional, to repeat the task.
    }

}, milliseconds);
 

13voto

apanloco Points 126

En fonction de ce que vous voulez atteindre, vous devriez jeter un oeil à Android Gestionnaires:

http://developer.android.com/reference/android/os/Handler.html

Si vous avez déjà utilisé le javascript setTimeout (), etc pour planifier l'exécution d'une tâche à l'avenir, c'est de l'Android manière de faire (postDelayed / sendMessageDelayed).

Notez que ni les Gestionnaires ou les Minuteries fait un téléphone Android de réveil depuis le mode veille. En d'autres termes, si vous souhaitez planifier quelque chose de réellement se produire même si l'écran est éteint / cpu est en veille, vous devez vérifier la AlarmManager trop.

5voto

nicholas.hauschild Points 21796

Je ne connais pas beaucoup JavaScript, mais je pense que les minuteries sont peut-être ce que vous recherchez.

http://developer.android.com/reference/java/util/Timer.html

Du lien:

One-shot sont programmés pour s'exécuter à une heure absolue ou après un délai relatif. Les tâches récurrentes sont planifiées avec une période ou un taux fixes.

4voto

Stephane JAIS Points 782

Voici un équivalent de setTimeout, particulièrement utile lorsque vous essayez de mettre à jour l'interface utilisateur après un délai.

Comme vous le savez peut-être, la mise à jour de l'interface utilisateur ne peut être effectuée qu'à partir du thread d'interface utilisateur. AsyncTask le fait pour vous en appelant sa méthode onPostExecute à partir de ce thread.

 new AsyncTask<Void, Void, Void>() {
        @Override
        protected Void doInBackground(Void... params) {
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // Update the User Interface
        }

    }.execute();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X