Страницы

Поиск по вопросам

среда, 18 декабря 2019 г.

Как правильно сделать чтобы функция вызвалась 3 раза через каждые 3 секунды?

#java #android


Нужно чтобы метод вызвался 3 раза через 3 секунды, но не останавливая главный поток
    


Ответы

Ответ 1



На самом деле здесь много способов. Можно использовать любой инструмент для работы с потоками, просто выбрать какой удобней. Мне кажется, что такое очень легко сделать: Handler + Runnable, только Loop его должен крутиться не в Main потоке. Пример: final Handler handler = new Handler(); handler.postDelayed(new Runnable() { @Override public void run() { doSomething(); count++; if (count <= 3) handler.postDelayed(this, 3000); } }, 3000); мне кажется это самый быстрый нативный способ, чтоб сделать такое, также лучше написать Runnable отдельно ибо(лямбды), это не всегда будет так работать, ну это уже другое. Rx + repeat ну и как альтернатива, как бы сделал я, например возьмем какой-нить api myApi .getRequestBody() .repeatWhen(h-> h.delay(3000L, TimeUnit.MILLISECONDS)) .takeUntil(stopPolling -> count < 3) .subscribe(this::showList); Я написал сокращенный вариант, ну если вы используете Rx, то разберетесь сразу. ps:писал без IDE поправьте, если что X_X.

Ответ 2



Например, вот так: final Handler h = new Handler(); for (int i=1;i

Ответ 3



А можно, наверное, и так? public static void main(String[] args) { new Thread() { @Override public void run() { while (true) { for (int i = 0; i < 3; i++) { ourMethod(); } try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } } } }.start(); } public static void ourMethod() { //do smth } Создаем новый поток, выполняем в цикле три вызова, усыпляем поток на три секунды и всё это в бесконечном цикле (условие остановки или прерывания потока за вами). Стартуем новый поток.

Комментариев нет:

Отправить комментарий