您好我正在构建一个应用程序,它将在固定的时间段(例如每30分钟)执行一段代码。我希望那个时期是严格的,我的意思是我希望保证这段时间是30分钟而不是28分钟,或者只要操作系统执行它。
我有一个Timer对象并按如下方式使用它:
timer=new Timer();
timer.scheduleAtFixedRate(new GetLastLocation(), 0, this.getInterval());
其中GetLastLocation是扩展TimerTask的处理程序类。
这工作正常,但我希望能够更改间隔,我目前正在做的是使用timer.scheduleAtFixedRate两次并更改interval参数让我们说一个newInterval但我认为这只是有两个定时器执行每个间隔和新的
现在间隔,我是对的吗?
我也尝试取消定时器,然后使用scheduleAtFixedRate()方法,但这会引发文档中所述的异常。
我该怎么做才能解决这个问题? 关于maxsap
答案 0 :(得分:5)
您无法安排已取消或已安排的计时器。您需要为此创建一个新计时器。
Timer timer;
synchronized void setupTimer(long duration){
if(timer != null) {
timer.cancel();
timer = null;
}
timer = new Timer();
timer.scheduleAtFixedRate(new GetLastLocation(), 0, duration);
}
现在,只要您想更改计时器的持续时间,就可以调用setupTimer。
答案 1 :(得分:1)
在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
中执行。
答案 2 :(得分:0)
您也可以使用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