開発では、特定のタスクを一定の間隔で実行する必要がある場合があります。たとえば、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 サイトに注目してください。