如何停止间隔(1分钟)运行的处理程序?

时间:2016-04-04 10:23:27

标签: android performance android-handler android-runonuithread

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

}

我尝试了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();
}

我发布了两次数据。第一次是当用户点击 START 按钮然后我开始计时器每隔一分钟执行一次。

2 个答案:

答案 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)

  1. 您应首先使用:Timer.Cancel()Timer.Purge()
  2. 停止TimerTask
  3. 您可以将handler.removeCallbacks(doAsynchronousTask);更改为removeCallbacksAndMessages(null)
  4. 修改

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