【问题标题】:android timer question安卓定时器问题
【发布时间】:2010-10-06 10:15:30
【问题描述】:

您好,我正在构建一个应用程序,它将在固定的时间段(例如每 30 分钟)执行一段代码。我希望那个时间段严格一点,我的意思是我想保证这个时间段是 30 分钟而不是 28 分钟,或者只要操作系统想要执行它。

我有一个 Timer 对象并按如下方式使用它:

timer=new Timer(); timer.scheduleAtFixedRate(new GetLastLocation(), 0, this.getInterval()); 其中 GetLastLocation 是扩展 TimerTask 的处理程序类。 这工作正常,但我希望能够更改间隔,我目前正在做的是使用 timer.scheduleAtFixedRate 两次并将间隔参数更改为 newInterval 但我认为这只是让两个计时器执行每个间隔和新的 现在间隔,我说的对吗?

我也尝试取消计时器,然后使用方法 scheduleAtFixedRate() 但这会引发文档中所述的异常。

我能做些什么来解决这个问题? 关于maxsap

【问题讨论】:

    标签: android


    【解决方案1】:

    您不能在已取消或已安排的计时器上安排。您需要为此创建一个新计时器。

    Timer timer;
    synchronized void setupTimer(long duration){
      if(timer != null) {
        timer.cancel();
        timer = null;
      }
      timer = new Timer();
      timer.scheduleAtFixedRate(new GetLastLocation(), 0, duration);
    }
    现在您可以随时调用 setupTimer 来更改计时器的持续时间。
    PS:在fixed-rate execution 中,每次执行都是相对于初始执行的计划执行时间安排的.如果由于任何原因(例如垃圾收集或其他后台活动)延迟执行,则将快速连续发生两次或更多执行以“赶上”。从长远来看,执行频率将恰好是指定周期的倒数(假设 Object.wait(long) 底层的系统时钟是准确的)。

    【讨论】:

      【解决方案2】:

      在 TimerTask 中定义您的任务(就像您所做的那样)并安排计时器。

      public final void checkFunction(){ 
        t = new Timer();
        tt = new TimerTask() {
            @Override
            public void run() {
                 //Execute code...
            }
        };
        t.schedule(tt, 10*1000); /* Run tt (your defined TimerTask) 
        again after 10 seconds. Change to your requested time. */
      }
      

      只需在任何你想要的地方执行函数,例如在onCreateonResume/onStart

      【讨论】:

        【解决方案3】:

        你也可以使用handler代替timertask。

        Handler mHandler = new Handler() {
            public void handleMessage(Message msg) {
                if(what.msg==1)
                {
                    what.msg==2;
                }       
            }   
        };
        mHandler.sendEmptyMessageDelayed(1, 10* 1000);//10*1000 10 sec.specify your time 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-07
          • 2018-07-03
          • 2014-02-19
          • 2011-06-12
          相关资源
          最近更新 更多