以下は私のコードです:
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
ボタンをチェックすると、「アラートオン」トーストが表示されますが、トーストが2回来ています。同様に、もう一度radio_on
ボタンを選択すると、トーストが3回目に表示されますが、必要なのは1回だけです。これは、タイマーが10秒ごとに実行されているためです。ボタンをクリックしたらタイマーを止めたいradio_off
。
問題は、タイマーを開始すると、それ以上停止しなかったことです。クラスのタイマータスクをいつ、どのようにキャンセルしますか?