我正在开发一个应用程序,我每隔一分钟将设备位置发送到服务器。我在这里使用Handler来安排我的任务。用户单击 STOP 按钮后,处理程序应停止执行。我无法做到这一点。请在下面找到我的代码。
public void callSpecficTime() {
timer = new Timer();
doAsynchronousTask = new TimerTask() {
@Override
public void run() {
handler.post(new Runnable() {
public void run() {
try {
Log.e("TImeOnSchedule", String.valueOf(inTime));
if(inTime==5)
{
new PostDataAsyncTask().execute();
}
} catch (Exception e) {
// TODO Auto-generated catch block
}
}
});
}
};
timer.schedule(doAsynchronousTask, 0, 60000);
}
StopTask 代码:
public void stopTask(){
if(doAsynchronousTask!=null){
Log.d("TIMER", "timer canceled");
handler.removeCallbacks(doAsynchronousTask);
// timer.cancel();
doAsynchronousTask.cancel();
}
}
我尝试了stopService
,removeCallbacks
但它没有用。任何人都可以为我提供解决方案吗?
已更新
public void onClickButton(View v)
{
if(v.getId()==R.id.IBstart)
{
callAsynchronousTask();
callSpecficTime();
}
else if(v.getId()==R.idIBstop)
{
stopTask();
}
}
这是** callAsynchronousTask()**
public void callAsynchronousTask() {
new PostDataAsyncTask().execute();
}
我发布了两次数据。第一次是当用户点击 START 按钮然后我开始计时器每隔一分钟执行一次。
答案 0 :(得分:0)
在purge()
之后使用cancel()
;
public void stopTask(){
if(doAsynchronousTask!=null){
Log.d("TIMER", "timer canceled");
handler.removeCallbacks(doAsynchronousTask);
// timer.cancel();
doAsynchronousTask.cancel();
doAsynchronousTask.purge();
}
}
答案 1 :(得分:0)
Timer.Cancel()
和Timer.Purge()
。handler.removeCallbacks(doAsynchronousTask);
更改为removeCallbacksAndMessages(null)
。修改
查看您的日程安排代码:timer.schedule(doAsynchronousTask, 0, 60000);
- >这意味着你立即开始task
并在60秒后重复它。
当我看到你的onClickButton
听众时,有2个任务会立即执行。因此,您无法取消已执行的任务。为避免这种情况,您可以致电:timer.schedule(doAsynchronousTask, 60000, 60000);