2017-10-02 5 views
4

Eigentlich wollte ich fragen kann ich Wert von Datenbank zu einer Timer-Verzögerung geben?Kann ich den Timer in verschiedenen Zeitabständen ausführen?

Hier bei myDelay, kann ich verschiedene Werte über die Datenbank geben Oder muss es repariert werden?

+1

es ist fest . Wenn ein anderer Wert eingegeben wird, können Sie den aktuellen Timer abbrechen und dann einen neuen mit anderer Zeit neu planen. – user1506104

+0

@ user1506104 Eigentlich werde ich die Timer-Verzögerung für 10 mal ändern. Also muss ich es in diesem Fall jedes Mal abbrechen? Oder es wird mit nur einer Zeile funktionieren. – Husnain

+1

sicher können Sie, brechen Sie den aktuellen Timer und erneut mit einem neuen Wert erneut initiieren –

Antwort

1

Wenn Sie die Zeit, die ganze Zeit über mit unterschiedlichen Werten zu ändern, empfehle ich Sie

schedule(TimerTask task, long time) 

Jedesmal, wenn man eine neue Zeit von DB hat verwenden, erstellen Sie einfach ein neues Timer() wie so

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); 
} 

Das Gute daran ist, dass Sie den Timer nicht jedes Mal abbrechen müssen, weil er einmal ausgeführt werden soll.

+0

Ist es nicht eine Zeit wie 14 Uhr? Nach was ich suche, ist ein anderer "WERT IN MILLIS", nachdem die App gestartet ist. Beispiel. Wenn es die App startet, erhält es 2000m und nach der nächsten Wiederholung der Schleife muss es 1500 und dann 500. Die Sequenz geht weiter – Husnain

+0

verwenden Sie stattdessen: Zeitplan (Timer Task Task, lange Zeit); Ich aktualisierte die Antwort – user1506104

+0

hat es für Sie funktioniert? – user1506104

0

Auch sollten Sie Ihre Herangehensweise an das Problem ändern, erstellen Sie eine Funktion, um die Zeit von der Datenbank zurück 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()); 

Dies sollte funktionieren, was Sie erreichen wollen ...

Verwandte Themen