0

我正在开发一个应用程序,在该应用程序中,我每隔一分钟将设备位置发送到服务器。我在这里使用 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);
}

停止任务代码:

    public void stopTask(){

    if(doAsynchronousTask!=null){
        Log.d("TIMER", "timer canceled");
        handler.removeCallbacks(doAsynchronousTask);
     // timer.cancel();
        doAsynchronousTask.cancel();
    }

}

我试过了stopServiceremoveCallbacks但没有用。谁能为此提供解决方案?

更新

 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();
}

我两次发布数据。第一次是用户单击开始按钮,然后我启动计时器以每分钟执行一次。

4

2 回答 2

0

purge()之后使用cancel()

public void stopTask(){

    if(doAsynchronousTask!=null){
        Log.d("TIMER", "timer canceled");
        handler.removeCallbacks(doAsynchronousTask);
     // timer.cancel();
        doAsynchronousTask.cancel();
        doAsynchronousTask.purge();
    }

}
于 2016-04-04T10:27:55.990 回答
0
  1. Timer.Cancel()你应该先用:和停止 TimerTask Timer.Purge()
  2. 你可以改变:handler.removeCallbacks(doAsynchronousTask);removeCallbacksAndMessages(null)

编辑:

查看您的计划代码:timer.schedule(doAsynchronousTask, 0, 60000);--> 这意味着您task立即开始并在 60 秒后重复它。
当我看到您的onClickButton听众时,有 2 个任务将立即执行。结果,您无法取消已执行的任务。为避免这种情况,您可以致电: timer.schedule(doAsynchronousTask, 60000, 60000);

于 2016-04-04T10:45:06.323 回答