Android 如何停止以间隔(1分钟)运行的处理程序?
我正在开发一个应用程序,在这个应用程序中,我每一分钟就向服务器发送一次设备位置。我在这里使用Handler来安排我的任务。用户单击停止按钮后,处理程序应停止执行。我无法做到这一点。请在下面找到我的代码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()
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();
}
}