我试图通过使用 scheduleatfixedrate 来调整时间序列。但是,当我编写这段代码时,我不知道除非清除计时器,否则在执行后不能更改时间段。
这是我对一系列事件的尝试:
@Override
protected void onStart()
{
super.onStart();
Timer timer = new Timer();
GregorianCalendar gCal = (GregorianCalendar) GregorianCalendar.getInstance();
final Runnable countDivision = new Runnable()
{
public void run()
{
/**
* Starts the sequence and wraps around when reached the last position
*/
if(playSequenceButton.isChecked())
{
setEnabled(true);
int length = sequencer.getLength();
int i = sequencer.getPosition();
DIODE[i].setChecked(true);
if(i > 0)
DIODE[i-1].setChecked(false);
if (i < 1)
DIODE[length].setChecked(false);
}
/**
* Stops and resets the sequence
*/
else
{
for (int i = 0; i < sequencer.getLength(); i++)
DIODE[i].setChecked(false);
sequencer.setPosition(START_POSITION);
setEnabled(false);
}
}
};
int millis = 999 - gCal.get(GregorianCalendar.MILLISECOND);
int inputBPM = TEMPO;
long qtrN=Math.round(((60000/inputBPM))*100000)/100000;
long sixteenN = (qtrN/4);
sixteenN=Math.round(sixteenN*100000)/100000;
timer.scheduleAtFixedRate(new TimerTask()
{
@Override
public void run()
{
// setEnabled(true);
runOnUiThread(countDivision);
}
}, 0, sixteenN);
}
您会推荐什么方法来设置可以动态更改的时间段?在可运行的 countDivision 运行时,sixteenN 变量需要能够更改。也许 timertask 不是正确的工具?
问候/米