開発では、特定のタスクを一定の間隔で実行する必要がある場合があります。たとえば、UI 上のコントロールを時間の経過とともに変更する必要がある場合は、Java が提供するタイマー ツール クラス、つまり Timer と TimerTask を使用できます。
Timer は、いくつかの重要なメソッドを備えた通常のクラスですが、TimerTask は、スレッドの run() メソッドに似た抽象メソッド run() を備えた抽象クラスです。このオブジェクトのスケジュール メソッドを使用して、この間隔の操作を完了します。
スケジュール メソッドには 3 つのパラメータがあります
最初のパラメータは、TimerTask 型のオブジェクトです。TimerTask を実装する run() メソッドは、定期的に実行されるタスクです。
2 番目のパラメータには 2 つのタイプがあります。は実行開始までにかかる時間を示すlong型で、もう1つは実行開始までにかかる時間を示すDate型です
3番目のパラメータは実行期間であり、long型です。
スケジュール メソッドには 2 つのパラメーターを持つ実行オーバーロードもあります。最初のパラメーターは依然として TimerTask であり、2 番目のパラメーターは実行にかかる時間を示す Long として表されます。Date の場合は、それを意味します。一定時間後に1回実行されます。
Timer はスレッドです。TimerTask のスケジュールを完了するには、schedule メソッドを使用します。つまり、Timer オブジェクトは、schedule メソッドを 1 回呼び出してスレッドを作成し、スケジュールを 1 回呼び出した後、 TimerTask が無制限のループである場合は、Timer の cancel() を使用して操作を停止します。もちろん、同じ Timer が cancel() メソッドを 1 回実行すると、すべての Timer スレッドが終了します。
使い方
//true 说明这个timer以daemon方式运行(优先级低,程序结束timer也自动结束)
java.util.Timer timer = new java.util.Timer(true);
TimerTask task = new TimerTask() {
public void run() {
//每次需要执行的代码放到这里面。
}
};
//以下是几种调度task的方法:
//time为Date类型:在指定时间执行一次。
timer.schedule(task, time);
//firstTime为Date类型,period为long,表示从firstTime时刻开始,每隔period毫秒执行一次。
timer.schedule(task, firstTime, period);
//delay 为long类型:从现在起过delay毫秒执行一次。
timer.schedule(task, delay);
//delay为long,period为long:从现在起过delay毫秒以后,每隔period毫秒执行一次。
timer.schedule(task, delay, period);サンプルコード:
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import java.util.Timer;
import java.util.TimerTask;
public class TimerTaskActivity extends Activity {
private Timer mTimer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// init timer
mTimer = new Timer();
// start timer task
setTimerTask();
}
@Override
protected void onDestroy() {
super.onDestroy();
// cancel timer
mTimer.cancel();
}
private void setTimerTask() {
mTimer.schedule(new TimerTask() {
@Override
public void run() {
Message message = new Message();
message.what = 1;
doActionHandler.sendMessage(message);
}
}, 1000, 1000/* 表示1000毫秒之後,每隔1000毫秒執行一次 */);
}
/**
* do some action
*/
private Handler doActionHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int msgId = msg.what;
switch (msgId) {
case 1:
// do some action
break;
default:
break;
}
}
};
}以上がこの記事の全内容です。皆様の学習に役立つことを願っております。また、皆様も PHP 中国語 Web サイトに参加していただければ幸いです。
Android の Java での Timer と TimerTask の使用法と例を分析した記事をさらに詳しく知りたい場合は、PHP 中国語 Web サイトに注目してください。