4 votes

Puis-je lancer la minuterie à différents intervalles de temps ?

En fait, je voulais demander si je peux donner une valeur de la base de données à une temporisation ?

    Timer timer = new Timer();
    TimerTask timerTask = new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                  // whatever
                    }
                }
            });
        }
    };
    timer.schedule(timerTask,2000,**myDelay**); //here at my delay

Ici, à myDelay, puis-je donner différentes valeurs via la base de données ? Ou cela doit être fixé ?

1voto

user1506104 Points 1298

Si vous devez changer l'heure tout le temps avec des valeurs différentes, je vous suggère d'utiliser

schedule(TimerTask task, long time)

Chaque fois que vous obtenez une nouvelle heure de la base de données, il suffit de créer une nouvelle heure de la base de données. Timer() comme ça

time = getNewTimeFromDB();
createNewTask(time);
....
private void createNewTask(long time) {
    Timer timer=new Timer();
    TimerTask timerTask=new TimerTask() {
        @Override
        public void run() {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // whatever
                }
            });
        }
    };
    timer.schedule(timerTask,time);
}

Ce qui est bien, c'est que vous n'avez pas à annuler la minuterie à chaque fois, car elle est censée fonctionner une seule fois.

0voto

rex Points 199

Peut-être devriez-vous changer votre approche du problème, créer une fonction pour retourner l'heure depuis la base de données. FunctionToGetDelayFromDB();

Timer timer=new Timer();
long time = FunctionToGetTimeFromDB();
TimerTask timerTask=new TimerTask() {
    @Override
    public void run() {
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                    // whatever
                    timer.schedule(timerTask, System.currentTimeMillis() + FunctionToGetDelayFromDB());
                }
            }
        });
    }
};
timer.schedule(timerTask, System.currentTimeMillis() + FunctionToGetDelayFromDB());

Cela devrait fonctionner pour ce que vous voulez réaliser...

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