代码之家  ›  专栏  ›  技术社区  ›  maxsap

Android计时器问题

  •  3
  • maxsap  · 技术社区  · 15 年前

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

    我有一个计时器对象,它的用法如下:

    timer=new Timer(); timer.scheduleAtFixedRate(new GetLastLocation(), 0, this.getInterval()); 其中getlastlocation是处理程序类wich extends timertask。 这很好,但我希望能够更改间隔,我目前正在做的是使用timer.scheduleAtfixedRate两次,并更改间隔参数以表示一个新的间隔,但我认为这只是让两个计时器执行每个间隔和新的 现在休息,对吗?

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

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

    3 回复  |  直到 13 年前
        1
  •  5
  •   bhups    15 年前

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

    Timer timer;
    synchronized void setupTimer(long duration){
      if(timer != null) {
        timer.cancel();
        timer = null;
      }
      timer = new Timer();
      timer.scheduleAtFixedRate(new GetLastLocation(), 0, duration);
    }
    现在,只要想更改计时器的持续时间,就可以调用SetupTimer。
    英寸:在 fixed-rate execution ,每个执行都是相对于初始执行的计划执行时间安排的。如果一个执行由于任何原因(如垃圾收集或其他后台活动)被延迟,两个或多个执行将快速连续发生以“赶上”。从长远来看,执行频率将正好是指定时间段的倒数(假定系统时钟基础对象.wait(long)是准确的)。
        2
  •  1
  •   Wroclai    15 年前

    在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. */
    }
    

    只需在任何需要的地方执行函数,例如 onCreate 或在 onResume / onStart .

        3
  •  0
  •   tkanzakic Wolfgang    13 年前

    您还可以使用处理程序而不是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