Een timer instellen in Android

Wat is de juiste manier om een ​​timer in Android in te stellen om een ​​taak te starten (een functie die ik maak die de gebruikersinterface niet verandert)?
Gebruik dit op de Java-manier:
http://docs.oracle.com/javase /1.5.0/docs/api/java/util/Timer.html

Of is er een betere manier in Android (de handler van Android)?


Antwoord 1, autoriteit 100%

ja java’s timer kan gebruikt worden, maar zoals de vraag vraagt ​​om een ​​betere manier(voor mobiel). Wat wordt uitgelegd Hier.


In het belang van StackOverflow:

Sinds Timereen nieuwe draad kan als zwaar worden beschouwd,

Als u alleen teruggebeld hoeft te worden terwijl de activiteit wordt uitgevoerd, een Handlerkan worden gebruikt in combinatie met een

Uitvoerbaar:

private final int interval = 1000; // 1 Second
private Handler handler = new Handler();
private Runnable runnable = new Runnable(){
    public void run() {
        Toast.makeText(MyActivity.this, "C'Mom no hands!", Toast.LENGTH_SHORT).show();
    }
};
...
handler.postAtTime(runnable, System.currentTimeMillis()+interval);
handler.postDelayed(runnable, interval);

of een Bericht

private final int EVENT1 = 1; 
private Handler handler = new Handler() {
    @Override
    public void handleMessage(Message msg) {
        switch (msg.what) {         
        case Event1:
            Toast.makeText(MyActivity.this, "Event 1", Toast.LENGTH_SHORT).show();
            break;
        default:
            Toast.makeText(MyActivity.this, "Unhandled", Toast.LENGTH_SHORT).show();
            break;
        }
    }
};
...
Message msg = handler.obtainMessage(EVENT1);
handler.sendMessageAtTime(msg, System.currentTimeMillis()+interval);
handler.sendMessageDelayed(msg, interval);

terzijde: deze benadering kan worden gebruikt als u een stukje code in de UI-thread wilt uitvoeren vanuit een andere thread.

als u moet worden teruggebeld, zelfs als uw activiteit niet actief is, kunt u een AlarmManager


Antwoord 2, autoriteit 88%

Standaard Java-manier om timers te gebruiken via java.util.Timeren java.util.TimerTaskwerkt prima in Android, maar je zou weet dat deze methode een nieuwe thread maakt.

U kunt overwegen de zeer handige Handler-klasse (android. os.Handler) en stuur berichten naar de handler via sendMessageAtTime(android.os.Message, long)of sendMessageDelayed(android.os.Message, long). Zodra u een bericht ontvangt, kunt u de gewenste taken uitvoeren. De tweede optie zou zijn om een ​​Uitvoerbaarobject te maken en dit te plannen via Handler’s functies postAtTime(java.lang.Runnable, long)of postDelayed(java.lang.Runnable, long).


Antwoord 3, autoriteit 82%

Zoals ik het heb gezien, is java.util.Timerhet meest gebruikt voor het implementeren van een timer.

Voor een herhalende taak:

new Timer().scheduleAtFixedRate(task, after, interval);

Voor een enkele uitvoering van een taak:

new Timer().schedule(task, after);

taakis de methode die moet worden uitgevoerd
nade tijd tot eerste uitvoering
(intervalde tijd voor het herhalen van de uitvoering)


Antwoord 4, autoriteit 27%

Ik hoop dat deze nuttig is en dat het minder inspanning kost om te implementeren,
Android CountDownTimer-klasse

bijv.

new CountDownTimer(30000, 1000) {
      public void onTick(long millisUntilFinished) {
          mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
      }
      public void onFinish() {
          mTextField.setText("done!");
      }  
}.start();

Antwoord 5, autoriteit 11%

Waarschijnlijk Timerconcept

new CountDownTimer(40000, 1000) { //40000 milli seconds is total time, 1000 milli seconds is time interval
 public void onTick(long millisUntilFinished) {
  }
  public void onFinish() {
 }
}.start();

of

Methode 2 ::

Programmeer de timer

Voeg een nieuwe variabele toe met de naam int time. Zet het op 0.
Voeg de volgende code toe aan de functie onCreate in MainActivity.java.

//Declare the timer
Timer t = new Timer();
//Set the schedule function and rate
t.scheduleAtFixedRate(new TimerTask() {
    @Override
    public void run() {
        //Called each time when 1000 milliseconds (1 second) (the period parameter)
    }
},
//Set how long before to start calling the TimerTask (in milliseconds)
0,
//Set the amount of time between each execution (in milliseconds)
1000);

Ga naar de run-methode en voeg de volgende code toe.

//We must use this function in order to change the text view text
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        TextView tv = (TextView) findViewById(R.id.main_timer_text);
        tv.setText(String.valueOf(time));
        time += 1;
    }
});

Antwoord 6, autoriteit 7%

Het is situationeel.

De Android-documentatie suggereert dat u AlarmManagermoet gebruiken om een Intentie die op het opgegeven tijdstip wordt geactiveerd als uw toepassing mogelijk niet actief is.

Anders moet u Handler gebruiken.

Opmerking: De Alarm Manager is bedoeld
voor gevallen waarin u uw . wilt hebben
applicatiecode uitgevoerd op een specifieke
tijd, zelfs als uw aanvraag dat niet is
momenteel actief. Voor normale timing
bewerkingen (ticks, time-outs, enz.) it
is gemakkelijker en veel efficiënter om
gebruik Handler.


7

Voor de timing bewerking die u moet gebruiken Handler .

Als u een service op de achtergrond de AlarmManager is de manier om te gaan draaien.

Other episodes