Может ли кто-нибудь сказать мне, существует ли эквивалент для setInterval/setTimeout для Android? Есть ли у кого-нибудь пример о том, как это сделать?
Что эквивалентно JavaScript setInterval/setTimeout в Android/Java?
Ответ 1
Как всегда в Android есть много способов сделать это, но, предполагая, что вы просто хотите немного запустить часть кода в одном и том же потоке, я использую это:
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Log.i("tag", "This'll run 300 milliseconds later");
}
},
300);
.. это в значительной степени эквивалентно
setTimeout(
function() {
console.log("This will run 300 milliseconds later");
},
300);
Ответ 2
setInterval()
которая повторяется в каждые n миллисекунд
Javascript
setInterval(function(){ Console.log("A Kiss every 5 seconds"); }, 5000);
Приблизительный java Эквивалент
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run(){
Log.i("tag", "A Kiss every 5 seconds");
}
},0,5000);
SetTimeout()
которая работает только после n миллисекунд
Javascript
setTimeout(function(){ Console.log("A Kiss after 5 seconds"); },5000);
Приблизительный java Эквивалент
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Log.i("tag","A Kiss after 5 seconds");
}
}, 5000);
Ответ 3
В зависимости от того, чего вы действительно хотите достичь, вы должны взглянуть на Android Handlers:
http://developer.android.com/reference/android/os/Handler.html
Если вы ранее использовали javascript setTimeout() и т.д., чтобы запланировать выполнение задачи в будущем, это способ Android для этого (postDelayed/sendMessageDelayed).
Обратите внимание, что ни обработчики, ни таймеры не активируют телефон Android в режиме ожидания. Другими словами, если вы хотите запланировать что-то на самом деле, даже если экран выключен /cpu спал, вам нужно также проверить AlarmManager.
Ответ 4
Если вы не беспокоитесь о том, чтобы разбудить телефон или вернуть свое приложение из мертвых, попробуйте:
// Param is optional, to run task on UI thread.
Handler handler = new Handler(Looper.getMainLooper());
Runnable runnable = new Runnable() {
@Override
public void run() {
// Do the task...
handler.postDelayed(this, milliseconds) // Optional, to repeat the task.
}
};
handler.postDelayed(runnable, milliseconds);
// Stop a repeating task like this.
hander.removeCallbacks(runnable);
Ответ 5
Я мало что знаю о JavaScript, но я думаю, что Таймеры могут быть тем, что вы ищете.
http://developer.android.com/reference/java/util/Timer.html
Из ссылки:
Один выстрел планируется запустить в абсолютное время или после относительной задержки. Повторяющиеся задачи назначаются либо фиксированным периодом, либо фиксированной ставкой.
Ответ 6
Здесь эквивалент setTimeout, в основном полезный при попытке обновления пользовательского интерфейса после задержки.
Как вы знаете, обновление пользовательского интерфейса может осуществляться только из потока пользовательского интерфейса. AsyncTask делает это для вас, вызывая его метод onPostExecute из этого потока.
new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// Update the User Interface
}
}.execute();
Ответ 7
import java.util.Timer;
import java.util.TimerTask;
class Clock {
private Timer mTimer = new Timer();
private int mSecondsPassed = 0;
private TimerTask mTask = new TimerTask() {
@Override
public void run() {
mSecondsPassed++;
System.out.println("Seconds passed: " + mSecondsPassed);
}
};
private void start() {
mTimer.scheduleAtFixedRate(mTask, 1000, 1000);
}
public static void main(String[] args) {
Clock c = new Clock();
c.start();
}
}
Ответ 8
Первый ответ - это, безусловно, правильный ответ, и это то, на чем я основывал эту версию лямбды, которая намного короче в синтаксисе. Поскольку Runnable имеет только 1 метод переопределения "run()", мы можем использовать lambda:
this.m_someBoolFlag = false;
new android.os.Handler().postDelayed(() -> this.m_someBoolFlag = true, 300);