Я пытаюсь использовать runnable
для обратного отсчета от 30 с до 0, затем запустить метод, затем перезапустить. Я не могу понять, как это работает правильно. Похоже, очень запутанное решение для простой задачи ...
tvHeatCD
- это TextView
, который должен обновляться каждую секунду, чтобы показывать «5 с», если осталось 5 секунд и т. Д.
reduceHeat()
- метод, который должен запускаться каждые 30 секунд (показаны условия соответствия)
stopHeatTimer()
просто звонит handler.removeCallbacks(..)
и heatTimerRunning = false
public void checkHeatTimer() {
RealmResults<Heat> heatList = realm.where(Heat.class).equalTo("theheat","theheat").findAll();
ht = heatList.get(0);
if(ht.getHeat() !=0) {
if(!heatTimerRunning) {
final int[] countdown = {30};
tvHeatCD.setVisibility(View.VISIBLE);
heatRunnable = new Runnable() {
@Override
public void run() {
heatTimerRunning = true;
if (!realm.isClosed()) {
countdown[0]--;
if(countdown[0] == 0) {
if (ht.getHeat() != 0) {
Crashlytics.setInt("heat", ht.getHeat());
reduceHeat("normal",20);
stopHeatTimer();
checkHeatTimer();
} else {
Crashlytics.setInt("heat", 0);
tvHeatCD.setVisibility(View.GONE);
stopHeatTimer();
}
}
tvHeatCD.setText(countdown[0] + "s");
heatHandler.postDelayed(heatRunnable, 1000);
} else if (realm.isClosed()) {
recreate();
}
}
};
heatHandler.postDelayed(heatRunnable, 30000);
}
} else {
tvHeatCD.setVisibility(View.GONE);
}
}
Ценю любую помощь ... спасибо!