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

Android 如何停止以间隔(1分钟)运行的处理程序?,android,performance,android-handler,android-runonuithread,Android,Performance,Android Handler,Android Runonuithread,我正在开发一个应用程序,在这个应用程序中,我每一分钟就向服务器发送一次设备位置。我在这里使用Handler来安排我的任务。用户单击停止按钮后,处理程序应停止执行。我无法做到这一点。请在下面找到我的代码 public void callSpecficTime() { timer = new Timer(); doAsynchronousTask = new TimerTask() { @Override public void run()

我正在开发一个应用程序,在这个应用程序中,我每一分钟就向服务器发送一次设备位置。我在这里使用Handler来安排我的任务。用户单击停止按钮后,处理程序应停止执行。我无法做到这一点。请在下面找到我的代码

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

}
我尝试了
stopService
removeCallbacks
,但没有成功。有人能为我提供解决方案吗

已更新

 public void onClickButton(View v)
{
    if(v.getId()==R.id.IBstart)
    {
        callAsynchronousTask();
        callSpecficTime();
    }
    else if(v.getId()==R.idIBstop)
    {
       stopTask();
    }
}
这是**callAsynchronousTask()**

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

在取消()后使用
purge()

  • 您应该首先使用以下命令停止计时器任务:
    Timer.Cancel()
    Timer.Purge()
  • 您可以更改:
    handler.removeCallbacks(doAsynchronousTask)
    removeCallbacksAndMessages(空)
  • 编辑:

    查看您的计划代码:
    timer.schedule(doAsynchronousTask,0,60000)-->这意味着您立即开始
    任务
    ,并在60秒后重复。

    当我看到您的
    onClickButton
    侦听器时,有两个任务将立即执行。因此,您无法取消已执行的任务。为了避免这种情况,可以调用:
    timer.schedule(doAsynchronousTask,60000,60000)

    time.purge()对吗?我做到了。问题仍然是一样的。我得到了
    doAsynchronoursTask
    作为
    null
    我尝试了。。。它仍然在运行……`public void stopTask(){timer.cancel();timer.purge();//new PostDataAsyncTask().cancel(true);handler.removecallbacksandsessages(null);}`您在哪里调用CallSpecVirtualName()?当用户在UIS中单击开始按钮时,您有解决此@Kingfisher的方法吗Phuoc@AnishKumar你能把你所有的密码都贴出来吗,也许问题来自另一段代码,而不是停止,启动一段。
     public void callAsynchronousTask() {
        new PostDataAsyncTask().execute();
    }
    
    public void stopTask(){
    
        if(doAsynchronousTask!=null){
            Log.d("TIMER", "timer canceled");
            handler.removeCallbacks(doAsynchronousTask);
         // timer.cancel();
            doAsynchronousTask.cancel();
            doAsynchronousTask.purge();
        }
    
    }