Jawaban:
Seperti biasa dengan Android ada banyak cara untuk melakukan ini, tetapi dengan asumsi Anda hanya ingin menjalankan sepotong kode sedikit kemudian di utas yang sama, saya menggunakan ini:
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Log.i("tag", "This'll run 300 milliseconds later");
}
},
300);
.. ini hampir setara dengan
setTimeout(
function() {
console.log("This will run 300 milliseconds later");
},
300);
MyActivityName.this.myFunctionOnActivity()
Handler timeout = new Handler(); final Runnable r = new Runnable{...}; timeout.postDelayed(r, 300);
dan jika Anda ingin membatalkannya:timeout.removeCallbacks(r);
setInterval ()
fungsi yang berulang dalam setiap milidetik
Javascript
setInterval(function(){ Console.log("A Kiss every 5 seconds"); }, 5000);
Perkiraan java Equivalent
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run(){
Log.i("tag", "A Kiss every 5 seconds");
}
},0,5000);
setTimeout ()
fungsi yang hanya berfungsi setelah n milidetik
Javascript
setTimeout(function(){ Console.log("A Kiss after 5 seconds"); },5000);
Perkiraan java Equivalent
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Log.i("tag","A Kiss after 5 seconds");
}
}, 5000);
scheduleAtFixedRate
metode ini, bagaimana Anda membatalkan timer dalam aktivitas setelah aktivitas tersebut selesai?
Jika Anda tidak khawatir membangunkan ponsel atau mengembalikan aplikasi Anda dari kematian, coba:
// 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.
handler.removeCallbacks(runnable);
Bergantung pada apa yang sebenarnya ingin Anda capai, Anda harus melihat pada Android Handlers:
http://developer.android.com/reference/android/os/Handler.html
Jika sebelumnya Anda menggunakan javascript setTimeout () dll untuk menjadwalkan tugas untuk dijalankan di masa mendatang, ini adalah cara Android untuk melakukannya (postDelayed / sendMessageDelayed).
Perhatikan bahwa Handler atau Timer tidak membuat ponsel Android bangun dari mode tidur. Dengan kata lain, jika Anda ingin menjadwalkan sesuatu untuk benar-benar terjadi meskipun layar mati / cpu sedang tidur, Anda perlu memeriksa AlarmManager juga.
Saya tidak tahu banyak tentang JavaScript, tapi saya pikir Timers mungkin yang Anda cari.
http://developer.android.com/reference/java/util/Timer.html
Dari tautan:
Satu tembakan dijadwalkan untuk berjalan pada waktu absolut atau setelah jeda relatif. Tugas berulang dijadwalkan dengan periode tetap atau kurs tetap.
Jawaban pertama jelas merupakan jawaban yang benar dan saya mendasari versi lambda ini, yang jauh lebih pendek dalam sintaksisnya. Karena Runnable hanya memiliki 1 metode override "run ()", kita dapat menggunakan lambda:
this.m_someBoolFlag = false;
new android.os.Handler().postDelayed(() -> this.m_someBoolFlag = true, 300);
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();
}
}
Berikut ini adalah setTimeout setara, sebagian besar berguna ketika mencoba memperbarui Antarmuka Pengguna setelah penundaan.
Seperti yang Anda ketahui, memperbarui antarmuka pengguna hanya dapat dilakukan dari utas UI. AsyncTask melakukan itu untuk Anda dengan memanggil metode onPostExecute dari utas itu.
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();
onProgressUpdate()
dapat juga digunakan untuk mensimulasikan setInterval()
. 2. AsyncTask
berjalan di thread pool (atau hanya satu thread), jadi a. mungkin harus menunggu sampai yang lain AsyncTask
selesai; b . itu akan mengambil satu utas dari kolam.
Saya sedang membuat mp3 player untuk android, saya ingin memperbarui waktu sekarang setiap 500 ms jadi saya melakukannya seperti ini
private void update() {
new android.os.Handler().postDelayed(new Runnable() {
@Override
public void run() {
long cur = player.getCurrentPosition();
long dur = player.getDuration();
currentTime = millisecondsToTime(cur);
currentTimeView.setText(currentTime);
if (cur < dur) {
updatePlayer();
}
// update seekbar
seekBar.setProgress( (int) Math.round((float)cur / (float)dur * 100f));
}
}, 500);
}
yang memanggil metode yang sama secara rekursif