使用定时器的占空比执行周期

时间:2013-08-19 19:22:41

标签: android

我需要执行占空比功能,以便在某些时段内使用级联定时器运行拖曳操作,使得在使用定时器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);  // 

}

}

1 个答案:

答案 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();

    }
}