Я хочу создать несколько таймеров. Я инициализирую это в ArrayList
в MainActivity
. Затем они добавляются в ReyclerView
, чтобы они также отображались. Для начала я go через a для l oop и выполняю метод startTimer ()
для каждого отдельного объекта. К сожалению, время подходит не для каждого таймера. Это означает, что один таймер быстрее, второй медленнее и так далее. Таким образом, каждый таймер запускается в разное время или текст изменяется в разное время.
Теперь у меня вопрос, есть ли другие подходы для запуска таймеров и изменения текстов в TextView, чтобы GUI обновлялся быстрее а сама программа шустрее работает? Цель должна заключаться в том, чтобы все таймеры работали одинаково быстро и без задержек. Заранее спасибо. С нетерпением жду ответа!
MainActivity
timerList= new ArrayList<>();
for (int i = 1; i <= 10; i++) {
timerList.add(new Timer(i, 600000 * i))); //
Each timer has a different time
}
recyclerView.setLayoutManager(recyclerViewLayoutManager);
adapter = new TimerAdapter(this, timerList);
recyclerView.setAdapter(adapter);
context = this;
button_start.setOnClickListener(v -> {
for (Timer timer: timerList) {
timer.startTimer();
});
@Override
public void updateMyText(int index, long time) {
timerList.get(index-1).setTime(time);
adapter.notifyDataSetChanged();
}
Таймер
public interface MyCallback {
public void updateMyText(int index, long time);
}
public Timer(int index, long startTimeMilliseconds) {
this.index = index;
this.time = startTimeMilliseconds;
mTimeLeftInMillis = startTimeMilliseconds;
startTime = startTimeMilliseconds;
}
public void startTimer() {
mCountDownTimer = new CountDownTimer(mTimeLeftInMillis, 1000) {
@Override
public void onTick(long millisUntilFinished) {
mTimeLeftInMillis = millisUntilFinished;
updateCountDownText();
}
@Override
public void onFinish() {
mTimerRunning = false;
}
}.start();
mTimerRunning = true;
}
public void resetTimer() {
mCountDownTimer.cancel();
mTimerRunning = false;
mTimeLeftInMillis = startTime;
timeLeftFormatted = formattedTime(startTime);
changeText(index-1);
}
public void updateCountDownText() {
//MainActivity.timerList.get(getIndex()-1).setTime(mTimeLeftInMillis);
//MainActivity.adapter.notifyDataSetChanged();
if(myCallback != null) {
myCallback.updateMyText(getIndex(), mTimeLeftInMillis);
}
}