Android Создание переменной, которая увеличивается один раз в секунду
В Java для Android я хочу создать переменную, которая увеличивается на 1 каждую секунду, другими словами, она считается, таким образом я могу проверить, была ли вызвана функция за последние 3 секунды, и если нет, я хочу это сделать что-то другое, чем если бы это было.
Есть ли встроенный способ сделать это? Я знаком с классом Timer, но, похоже, он не работает так, как мне хотелось бы... есть что-нибудь еще?
tl; dr: я хочу создать переменную, которая увеличивается на 1 каждую секунду, поэтому я могу использовать ее для обработки функции по-разному в зависимости от того, сколько времени прошло с момента ее последнего вызова. Есть простой способ сделать это? Если нет, то какой трудный способ сделать это?
3 ответа
Почему бы не сохранить последний раз, когда вместо этого вызывался метод, а затем сравнить его с текущим временем?
private long timeLastCalled;
public void someMethod() {
timeLastCalled = SystemClock.elapsedRealTime();
}
public boolean someMethodCalledRecently() {
return (SystemClock.elapsedRealTime() - timeLastCalled) > 3000;
}
final int[] yourVariable = new int[1];
yourVariable[0] = 0;
updateVariableTimer = new CountDownTimer(howLongYouWantTimerToLast, 1000) {
@Override
public void onTick(long l) {
yourVariable[0] += 1;
}
}.start();
Или в качестве альтернативы сделать это с флагом вместо отслеживания подсчета переменных:
final boolean functionCalledRecently = false;
hasFunctionBeenCalledRecentlyTimer = new CountDownTimer(3000, 1000) {
@Override
public void onTick(long l) {
functionCalledRecently = true;
}
@Override
public void onFinish() {
functionCalledRecently = false;
}
}.start();
Если вам просто нужно посмотреть, был ли метод вызван в течение последних 3 секунд, вы можете использовать Handler
и Boolean
флаг, чтобы подтвердить это.
private Handler mHandler = new Handler();
private boolean wasRun = false;
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
if(wasRun){
//whatever you want to do if run
}
mHandler.postDelayed(this, 3000);
}
},3000); //3 sec
В этом примере Handler
будет работать с задержкой в 3 секунды. Каждый раз, когда он запускается, он проверяет, был ли ранее вызван другой метод, вычисляя if (wasRun). Таким образом, вы можете изменить то, что происходит, если метод был / не был вызван. Затем обработчик снова запустит iself с задержкой в 3 секунды. Все, что вам нужно сделать, это обновить флаг wasRun, чтобы он был истинным, если ваш метод был вызван, или ложным, если это не так.,