我试图制作一个音乐应用程序,它有一个扩展TimerTask的声音类。类声音具有一个音频行,该行使用计时器重复声音。
当我试图改变汇率时,我的问题出现了。下次声音开始时它会改变。
我尝试做这样的事情:
public class Sound extends TimerTask {
private boolean playing;
private Timer t;
private long rate;
public void turnOn(){
if(!playing){
playing=true;
t= new Timer();
t.scheduleAtFixedRate(this, 0, rate);
}else{
playing=false;
t.cancel();
}
}
public void run(){
if(playing){
//Here it would play the sound
}
}
public void changeRate(long rate){
this.rate=rate;
}
但这行不通。正如我所读到的,我应该创建一个新的 TimerTask 来执行 scheduleAtFixedRate,但是 TimerTask 是类,所以,有没有办法在不创建另一个 Sound 类对象的情况下做到这一点?谢谢!
如果我
理解正确,你可能想要一个匿名类:
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
if (playing) {
// play sound
}
}
}, 0, rate);
有了这个Sound
就不必扩展TimerTask
。