161 votes

Comment exécuter une méthode toutes les X secondes

Je développe une application Android 2.3.3 et j'ai besoin d'exécuter une méthode tous les jours. X secondes .

Dans iOS, j'ai NSTimer mais pour Android, je ne sais pas quoi utiliser.

Quelqu'un m'a recommandé Manipulateur ; un autre me recommande Gestionnaire d'alarme mais je ne sais pas quelle méthode convient le mieux aux NSTimer .

Voici le code que je souhaite mettre en œuvre dans Android :

timer2 = [
    NSTimer scheduledTimerWithTimeInterval:(1.0f/20.0f)
    target:self
    selector:@selector(loopTask)
    userInfo:nil
    repeats:YES
];

timer1 = [
    NSTimer scheduledTimerWithTimeInterval:(1.0f/4.0f)
    target:self
    selector:@selector(isFree)
    userInfo:nil
    repeats:YES
];

J'ai besoin de quelque chose qui fonctionne comme NSTimer .

Que me recommandez-vous ?

7voto

Behzad F94 Points 170
    new CountDownTimer(120000, 1000) {

        public void onTick(long millisUntilFinished) {
            txtcounter.setText(" " + millisUntilFinished / 1000);

        }

        public void onFinish() {

            txtcounter.setText(" TimeOut  ");
            Main2Activity.ShowPayment = false;
            EventBus.getDefault().post("go-main");

        }

    }.start();

2voto

Sam Points 2090

Ici j'ai utilisé un thread dans onCreate() d'une Activity de façon répétitive, le timer ne permet pas tout dans certains cas Thread est la solution

     Thread t = new Thread() {
        @Override
        public void run() {
            while (!isInterrupted()) {
                try {
                    Thread.sleep(10000);  //1000ms = 1 sec
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {

                            SharedPreferences mPrefs = getSharedPreferences("sam", MODE_PRIVATE);
                            Gson gson = new Gson();
                            String json = mPrefs.getString("chat_list", "");
                            GelenMesajlar model = gson.fromJson(json, GelenMesajlar.class);
                            String sam = "";

                            ChatAdapter adapter = new ChatAdapter(Chat.this, model.getData());
                            listview.setAdapter(adapter);
                           // listview.setStackFromBottom(true);
                          //  Util.showMessage(Chat.this,"Merhabalar");
                        }
                    });

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
    };

    t.start();

En cas de besoin, il peut être arrêté par

@Override
protected void onDestroy() {
    super.onDestroy();
    Thread.interrupted();
    //t.interrupted();
}

2voto

O. Remlawi Points 237

Je procède de cette manière et cela fonctionne bien (le code est écrit en Kotlin ) :

private lateinit var runnable: Runnable

private var handler = Handler(Looper.getMainLooper())

private val repeatPeriod: Long = 10000

Réinitialisez ensuite l'exécutable à l'intérieur de votre fonction

runnable = Runnable {

    // Your code goes here

    handler.postDelayed(runnable, repeatPeriod)

}

handler.postDelayed(runnable, repeatPeriod)

Notez que si vous ne postDelay deux fois plus gestionnaire La boucle ne sera pas intinérante !

1voto

Dominik Ter Points 116

En Kotlin vous pouvez le faire de cette façon avec un Runnable :

private lateinit var runnable: Runnable
private var handler = Handler(Looper.getMainLooper())
private val interval: Long = 1000
private var isRunning = false

val runnable = object : Runnable {
    override fun run() {
        // Do something every second
        function()
        // Call your runnable again after interval
      handler?.postDelayed(runnable(this, interval))
    }
}

// Call your function once
if (!isRunning) {
    handler?.postDelayed(runnable, interval)
    isRunning = true
}

// Remove your repeatedly called function
if (isRunning) {
    handler?.removeCallbacks(runnable)
    isRunning = false
}

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