web-dev-qa-db-fra.com

Quel est l'équivalent de setTimeOut () javascript pour Android?

J'ai besoin du code équivalent de setTimeOut(call function(),milliseconds); pour Android.

setTimeOut(call function(),milliseconds);

Vous voulez probablement vérifier TimerTask

Depuis que vous avez soulevé cette question, je voudrais faire une recommandation différente, qui est un Handler . Il est plus simple à utiliser qu'une TimerTask car vous n'aurez pas besoin d'appeler explicitement runOnUiThread car le gestionnaire sera associé au thread d'interface utilisateur tant qu'il est créé sur le thread d'interface utilisateur ou que vous le créez en utilisant le looper principal dans son constructeur. Cela fonctionnerait comme ceci:

private Handler mHandler;
Runnable myTask = new Runnable() {
  @Override
  public void run() {
     //do work
     mHandler.postDelayed(this, 1000);
  }
}

@Override
public void onCreate(Bundle savedState) {
  super.onCreate(savedState);
  mHandler = new Handler(Looper.getMainLooper());
}
//just as an example, we'll start the task when the activity is started
@Override
public void onStart() { 
  super.onStart();
  mHandler.postDelayed(myTask, 1000);
}

//at some point in your program you will probably want the handler to stop (in onStop is a good place)
@Override
public void onStop() {
  super.onStop();
  mHandler.removeCallbacks(myTask);
}

Il y a certaines choses à savoir avec les gestionnaires de votre activité:

  1. Votre activité peut être arrêtée/non visible pendant que votre gestionnaire est toujours en cours d'exécution si vous ne l'arrêtez pas dans onStop (ou onPause si vous l'avez démarrée dans onResume), cela entraînera des problèmes si vous essayez de mettre à jour l'interface utilisateur
  2. Si votre téléphone s'endort profondément, les gestionnaires ne se déclencheront pas aussi souvent que vous l'avez spécifié. Je le sais car j'ai fait des tests approfondis avec des appareils Bluetooth pour tester la connectivité après plusieurs heures de fonctionnement et j'avais utilisé des gestionnaires avec des impressions de journaux à chaque fois qu'ils tiraient.
  3. Si vous avez besoin que cette minuterie soit continue, je recommande de la mettre dans un service qui durera plus longtemps qu'une activité. Enregistrez votre activité auprès du service (en mettant en place une interface définie dans le service pour la communication avec le service).
21
Matt Wolfe

C'est le code que j'ai utilisé dans mon projet actuel. J'ai utilisé TimerTask comme Matt l'a dit. 60000 est le milisec. = 60 sec. je l'ai utilisé pour rafraîchir les scores des matchs.

private void refreshTimer() {
        autoUpdate = new Timer();
        autoUpdate.schedule(new TimerTask() {
            @Override
            public void run() {
                runOnUiThread(new Runnable() {
                    public void run() {
                        adapter = Score.getScoreListAdapter(getApplicationContext());
                        adapter.forceReload();
                        setListAdapter(adapter);
                    }
                });
            }
        }, 0, 60000);
11
GiantRobot

Il existe une méthode setTimeout () dans la bibliothèque nderscore-Java . Je suis le responsable du projet.

Exemple de code:

import com.github.underscore.lodash.U;
import com.github.underscore.Function;

public class Main {

    public static void main(String[] args) {
        final Integer[] counter = new Integer[] {0};
        Function<Void> incr = new Function<Void>() { public Void apply() {
            counter[0]++; return null; } };
        U.setTimeout(incr, 100);
    }
}

La fonction sera lancée dans 100 ms avec un nouveau thread.

1

Comme suite à la réponse de Valentyn en utilisant Java soulignement:

Ajoutez une dépendance à gradle:

dependencies {
    compile group: 'com.github.javadev', name: 'underscore', version: '1.15'
}

Java:

import com.github.underscore.lodash.$;

$.setTimeout(new Function<Void>() {
    public Void apply() {
        // work
        return null;
    }
}, 1000); // 1 second
1
noamtcohen