0

当检查切换按钮时,我正在尝试设置将以1秒钟的间隔循环的声音。我试图为此制作异步任务,但是当我打开此活动时它崩溃了,为什么?选中切换按钮时,我应该怎么做才能让它以 1 秒的间隔循环声音?

由 AlexanderFox 解决

我当前的java代码:

    final ToggleButton metronomepp = (ToggleButton) findViewById (R.id.metronomepp);
    metronomepp.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                Log.i("Metronome", "InWhile");

                if(isChecked) {
                    currentTask = new TimerTask() {
                        @Override
                        public void run() {
                            if (metronome.isPlaying()) { metronome.pause(); }
                            metronome.seekTo(0);
                            metronome.start();
                        }
                    };
                    myTimer.schedule(currentTask, 0, 1000); 
                } else {
                    currentTask.cancel();
               }   
        }
    });

我现在在更改等待时间时遇到问题。我有双变量 timetw 并将 1000 更改为 timetw 并强制转换为 long 但如果我根据应用程序中的选择更改了时间,当我检查切换按钮时应用程序崩溃。

4

1 回答 1

1

我认为使用无限“while”循环是非常糟糕的主意。更好地使用Timer 类的schedule方法来实现。当您不再需要重复此任务时,只需调用 Timer 的“取消”方法。

例如(更正):

private TimerTask currentTask;

@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
    if(isChecked) {
        currentTask = new TimerTask() {
            @Override
            public void run() {
                if (metronome.isPlaying()) { metronome.pause(); }
                metronome.seekTo(0);
                metronome.start();
            }
        };
        myTimer.schedule(currentTask, 0, 1000); //in this line we tell to repeat sound every second without start delay
    } else {
        currentTask.cancel();
    }
}
于 2013-03-15T08:53:20.117 回答