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
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.