java – 暂停定时器,然后继续
发布时间:2020-11-18 03:33:19  所属栏目:Java  来源:互联网 
            导读:请参阅@Yuri从这里发贴的代码. How to stop a timer after certain number of times.如果我想停止它,因为一些条件,然后重新启动它.我该怎么做呢? private final static int DELAY = 10000; private final Handler handler = new Handler(); privat
                
                
                
            | 
                         请参阅@Yuri从这里发贴的代码. How to stop a timer after certain number of times.如果我想停止它,因为一些条件,然后重新启动它.我该怎么做呢? private final static int DELAY = 10000;
    private final Handler handler = new Handler();
    private final Timer timer = new Timer();
    private final TimerTask task = new TimerTask() {
        private int counter = 0;
        public void run() {
            handler.post(new Runnable() {
                public void run() {
                    Toast.makeText(MainActivity.this,"test",Toast.LENGTH_SHORT).show();
                }
            });
            if(++counter == 4) {
                timer.cancel();
            }
    //do some stuff in my app
   //restart the timer again
        }
    };
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        timer.schedule(task,DELAY,DELAY);
    } 
 这是我试过的,但它一直在崩溃. final int DELAY = 10000;
        Timer timer;
        MyTask task;
        startManager Scanner;
        Handler handler;
        public class MyTask extends TimerTask {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        //do Stuff here
                        }
        });
    }
        public class startManager {
            public startManager() {
                handler = new Handler();
                timer = new Timer();
            }
            public void start() {
                timer.schedule(task,DELAY);
            }
            public void cancel() {
                timer.cancel();
                timer.purge();
            }
        }
    }
 @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
Scanner = new startManager();
//do some stuff
 if (...)
Scanner.cancel()
//restart the timer and its task
Scanner=new startManager();
        }
解决方法如果您已经取消了一个计时器,则无法重新启动计时器,您必须创建一个计时器.看到这个answer,它包含一个视频和源代码我怎么做了类似的事情. 基本上有两种方法:暂停和恢复 暂停: public void pause() {
    this.timer.cancel();
} 
 在简历中: public void resume() {
    this.timer = new Timer();
    this.timer.schedule( aTask,1000 );
} 
 这使得暂停/恢复的感觉. 如果您的计时器根据应用程序的状态执行不同的操作,则可以考虑使用StatePattern 拳头定义抽象状态: abstract class TaskState  {
    public void run();
    public TaskState next();
} 
 并提供尽可能多的州.关键是一个国家引导你到另一个国家. class InitialState extends TaskState {
    public void run() {
        System.out.println( "starting...");
    }
    public TaskState next() {
         return new FinalState();
    }
 }
 class FinalState extends TaskState  {
     public void run() {
         System.out.println("Finishing...");
     }
     public TaskState next(){
         return new InitialState();
    }
 } 
 然后更改计时器中的状态. Timer timer = new Timer();
TaskState state = new InitialState();
timer.schedule( new TimerTask() {
     public void run() {
          this.state.run();
          if( shouldChangeState() ) {
              this.state = this.state.next();
           }
     }
 },1000 ); 
 最后,如果您需要的是执行相同的事情,但是以不同的速度,您可以考虑使用TimingFramework.它有点复杂,但让我们来做一些很酷的动画,通过允许某些组件的绘画以不同的速度进行(而不是线性的) (编辑:莱芜站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!  | 
                  
