如何停止计时器的Android
问题描述:
下面是我的代码:如何停止计时器的Android
在MainActivity.class
private OnCheckedChangeListener alert_on_off_listener = new OnCheckedChangeListener(){
public void onCheckedChanged(RadioGroup groupname, int CheckedButtonId) {
if(CheckedButtonId==R.id.radiobutton_on){
Toast.makeText(getApplicationContext(), "radio on", Toast.LENGTH_LONG).show();
alert_on = true;
display_alert();
}
else{
alert_on = false;
}
}
};
public void display_alert(){
int delay = 10000;
Timer timer =new Timer();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
Intent myIntent = new Intent(HoraWatchActivity.this,MyService.class);
startService(myIntent);
}
}, delay,10000);
}
MyService.class
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
if(MainActivity.alert_on)
Toast.makeText(getApplicationContext(), "Alert is On", Toast.LENGTH_LONG).show();
else
Toast.makeText(getApplicationContext(), "Alert is Off",Toast.LENGTH_LONG).show();
}
我根据检查onCheckedChangeListener
并调用display_alert
功能选中单选按钮。
在display_alert
函数我使用定时器调度在10秒的固定速率和调用myservice
类。
因此,一旦我检查了radio_on
按钮,它会调用我的display_aler
t功能,并在烤面包中获得“警报开启”。所以它的工作正常。
如果我再次检查radio_off
按钮,然后检查radio_on
按钮,我得到“警戒”吐司,但吐司来了两次。同样,如果我再次选择radio_on
按钮,则第三次显示敬酒,但我只需要一次。这是由于计时器每10秒运行一次。一旦我点击radio_off
按钮,我想停止计时器。
问题是,一旦我启动了计时器,我就没有再停下来。何时以及如何取消班上的计时任务?
答
首先,在一个独立的方式创建的TimerTask:
class MyTimerTask extends TimerTask {
public void run() {
Intent myIntent = new Intent(HoraWatchActivity.this,MyService.class);
startService(myIntent);
}
}
声明它的地方,当然你OnCheckedChangeListener可见:
MyTimerTask myTimerTask;
附表它:
public void display_alert() {
int delay = 10000;
myTimerTask = new MyTimerTask();
Timer timer = new Timer();
timer.scheduleAtFixedRate(myTimerTask, delay, 10000);
}
而且然后将您的代码修改为:
private OnCheckedChangeListener alert_on_off_listener = new OnCheckedChangeListener(){
public void onCheckedChanged(RadioGroup groupname, int CheckedButtonId) {
if(CheckedButtonId==R.id.radiobutton_on){
Toast.makeText(getApplicationContext(), "radio on", Toast.LENGTH_LONG).show();
alert_on = true;
display_alert();
}
else{
myTimerTask.cancel();
alert_on = false;
}
}
};
答
if(timerTask!=null){
timer.cancel();
}
您可以使用代码来停止/删除计时器
答
首先创建一个类继承的TimerTask,使得它的对象并处理对象上的操作。
int delay = 10000;
Timer timer =new Timer();
myTimer mTask= new myTimer();
timer.scheduleAtFixedRate(mTask, delay, 10000);
public class myTimer extends TimerTask
{
@Override
public void run() {
Intent myIntent = new Intent(HoraWatchActivity.this,MyService.class);
startService(myIntent);
}
}
当你mTask作品获得了刚刚
if(mTask!=null){
mTask.cancel();
}
完蛋了。
答
我可以使用下面的代码来停止计时器和任务:
if(null != timer)
{
timer.cancel();
Log.i(LOG_TAG,"Number of cancelled tasks purged: " + timer.purge());
timer = null;
}
if(task != null)
{
Log.i(LOG_TAG,"Tracking cancellation status: " + task.cancel());
task = null;
}