답변:
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);
MyActivityName.this.myFunctionOnActivity()
Handler timeout = new Handler(); final Runnable r = new Runnable{...}; timeout.postDelayed(r, 300);
당신은 그것을 취소 할 경우 :timeout.removeCallbacks(r);
setInterval ()
n 밀리 초마다 반복되는 함수
자바 스크립트
setInterval(function(){ Console.log("A Kiss every 5 seconds"); }, 5000);
대략적인 자바 상당
new Timer().scheduleAtFixedRate(new TimerTask(){
@Override
public void run(){
Log.i("tag", "A Kiss every 5 seconds");
}
},0,5000);
setTimeout ()
n 밀리 초 후에 만 작동하는 함수
자바 스크립트
setTimeout(function(){ Console.log("A Kiss after 5 seconds"); },5000);
대략적인 자바 상당
new android.os.Handler().postDelayed(
new Runnable() {
public void run() {
Log.i("tag","A Kiss after 5 seconds");
}
}, 5000);
scheduleAtFixedRate
그 활동이 완료되면 방법, 당신은 어떻게 활동 내에서 타이머를 취소합니까?
휴대 전화를 깨우거나 앱을 죽은 상태에서 되 돌리는 것이 걱정되지 않는다면 다음을 시도해보세요.
// 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);
실제로 달성하고자하는 것에 따라 Android 핸들러를 살펴 봐야합니다.
http://developer.android.com/reference/android/os/Handler.html
이전에 javascript setTimeout () 등을 사용하여 향후 작업을 실행하도록 예약 한 경우 이것이 Android 방식 (postDelayed / sendMessageDelayed)입니다.
핸들러 또는 타이머 모두 Android 휴대 전화를 절전 모드에서 깨우지 않습니다. 즉, 화면이 꺼져 있거나 CPU가 절전 상태 인 경우에도 실제로 일어나도록 예약하려면 AlarmManager도 확인해야합니다.
JavaScript에 대해 잘 모르지만 Timers가 당신이 찾고있는 것일 수 있다고 생각합니다.
http://developer.android.com/reference/java/util/Timer.html
링크에서 :
원샷은 절대 시간 또는 상대적 지연 후에 실행되도록 예약됩니다. 반복 작업은 고정 된 기간 또는 고정 된 속도로 예약됩니다.
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();
}
}
다음은 setTimeout에 해당하는 것으로, 지연 후 사용자 인터페이스를 업데이트하려고 할 때 주로 유용합니다.
아시다시피 사용자 인터페이스 업데이트는 UI 스레드에서만 수행 할 수 있습니다. 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();
onProgressUpdate()
또한 시뮬레이션하는데 사용될 수있다 setInterval()
. 2. AsyncTask
스레드 풀 (또는 단일 스레드)에서 실행되므로 a. 다른 AsyncTask
작업이 끝날 때까지 기다려야 할 수도 있습니다 . b . 풀에서 하나의 스레드를 차지합니다.
안드로이드 용 mp3 플레이어를 만들고 있었는데 현재 시간을 500ms 마다 업데이트하고 싶었 기 때문에 이렇게했습니다.
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);
}
동일한 메서드를 재귀 적으로 호출하는