回答:
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ミリ秒ごとに繰り返される関数
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);
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についてはあまり知りませんが、タイマーがあなたの探しているものかもしれません。
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
スレッドプール(または単一のスレッド)で実行されるため、別がAsyncTask
終了するまで待機する必要がある場合があります。b。プールから1つのスレッドを使用します。
私はアンドロイド用の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);
}
同じメソッドを再帰的に呼び出す