我需要执行占空比功能,以便在某些时段内使用级联定时器运行拖曳操作,使得在使用定时器1运行操作1的开启时段(x秒)期间以及当定时器1完成时然后是第二个关闭时段(y) sec)使用timer2运行操作2并再次重复该场景。 我是初学者程序员
请任何人帮助我正常运行。
我试着编写下面的代码,它看起来像:
package com.example.periodictimer;
公共类MainActivity扩展了Activity {
Timer t1 = new Timer();
Timer t2 = new Timer();
TimerTask mTimerTask1;
TimerTask mTimerTask2;
TextView tv1;
TextView tv2;
boolean z;
Handler hand = new Handler();
Handler hand1 = new Handler();
Button hButtonStart;
int time =0;
int time1 =0;
boolean flag1;
@覆盖 protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1 = (TextView) findViewById(R.id.tv1);
tv2 = (TextView) findViewById(R.id.tv2);
doTimerTask1();
} public void doTimerTask1(){
mTimerTask1 = new TimerTask() {
public void run() {
hand.post(new Runnable() {
public void run() {
time++;
tv1.setText("Execute Operation1: " + time);
doTimerTask2();
}
});
}
};
// public void schedule (TimerTask task, long delay, long period)
t1.schedule(mTimerTask1,0, 3000); //
}
public void doTimerTask2(){
mTimerTask1 = new TimerTask() {
public void run() {
hand.post(new Runnable() {
public void run() {
time1++;
// update TextView
tv2.setText("Execute Operation2:" + time1);
//Log.d("TIMER", "TimerTask run");
}
});
}};
// public void schedule (TimerTask task, long delay, long period)
t1.schedule(mTimerTask2,500, 5000); //
}
}
答案 0 :(得分:0)
我建议您使用两个计时器和scheduleAtFixedRate
方法而不是schedule
方法。
此方法的作用如下scheduleAtFixedRate(timerTask, delay, period)
其中:
TimerTask :要执行TimerTask
类实例的任务。在这里你可以在其中一个计时器任务中打开你的旗帜,在另一个计时器任务中关闭它。
延迟:第一次运行任务之前的延迟量。
期间:连续执行计时器任务之前的占空比期间。
诀窍是安排两个具有相同延迟周期的定时器,但其中一个定时器以0延迟开始,另一个定时器以delay = ON_period开始。
下面的代码示例在一个java程序中显示它,其中一个标志打开4秒然后关闭两秒钟,依此类推。
import java.util.Date;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Timer;
import java.util.TimerTask;
public class TestTimer {
TimerTask timerTask2;
TimerTask timerTask1;
Timer t1 = new Timer();
Timer t2 = new Timer();
boolean flag = true;
private Date date;
private DateFormat dateFormat;
public TestTimer() {
flag = true;
dateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");;
}
public void test() {
timerTask1 = new TimerTask() {
@Override
public void run() {
flag = true;
date = new Date();
System.out.println("Task1 [" + (flag ? "ON" : "OFF" ) + "] " +
dateFormat.format(date));
}
};
timerTask2 = new TimerTask() {
@Override
public void run() {
flag = false;
date = new Date();
System.out.println("Task2 [" + (flag ? "ON" : "OFF" ) + "] " +
dateFormat.format(date));
}
};
t1.scheduleAtFixedRate(timerTask1, 0, 6000);
t2.scheduleAtFixedRate(timerTask2, 4000, 6000);
}
public static void main(String [] args) {
TestTimer tt = new TestTimer();
tt.test();
}
}