有的定时器任务是随系统的开启而保持常开的,有的定时器任务就是任务处理完毕就需要回收以释放系统资源,那么如何结束定时器任务?
定时器任务是不能采用for循环或者while循环来结束的,采用私有变量也不合适,因此搜到了这种方法:
可以封装一个FlagBean类用来控制,在定时器构造函数中传入这个FlagBean的实例,在定时器内部进行其他控制,总而言之就是在外部进行控制,参见下面的代码
定时器控制类:
- package com.feng.control;
- /**
- * 定时器控制类
- */
- public class ControlFlag {
- private int count;
- private boolean flag;
- public int getCount() {
- return count;
- }
- public void setCount(int count) {
- this.count = count;
- }
- public boolean isFlag() {
- return flag;
- }
- public void setFlag(boolean flag) {
- this.flag = flag;
- }
- }
下面的方法用来模拟定时器任务
- package com.feng.operator;
- import com.feng.control.ControlFlag;
- /**
- * 模拟定时器任务
- */
- public class Operator {
- private ControlFlag control;
- public Operator(ControlFlag controlFlag) {
- this.control = controlFlag;
- }
- public void testOperator(int i){
- System.out.println("输出了: " + i );
- this.control.setCount(this.control.getCount() + 1) ;
- }
- public ControlFlag getControl() {
- return control;
- }
- public void setControl(ControlFlag control) {
- this.control = control;
- }
- }
测试类
- package com.feng.test;
- import com.feng.control.ControlFlag;
- import com.feng.operator.Operator;
- public class TestOutSideControl {
- public static void main(String[] args) {
- ControlFlag controlFlag = new ControlFlag();
- controlFlag.setFlag(true);
- controlFlag.setCount(0);
- Operator op = new Operator(controlFlag);
- while (controlFlag.isFlag()) {
- if (controlFlag.getCount() > 20) {
- controlFlag.setFlag(false);
- continue;
- }
- op.testOperator(20);
- }
- }
- }
转载自:http://blog.youkuaiyun.com/android_robot/article/details/6942114