Как вызвать метод с задержкой

Как вызвать метод с задержкой в Android приложении

В Android приложении есть ситуации когда нужно выполнить метод после определенной задержки. Особенно полезно когда пользователь ввел данные и нужно с небольшой задержкой выполнить метод поиска. Теперь давайте рассмотрим как можно вызвать метод задав для него задержку.

Класс Handler и метод postDelayed(Runnable r, long delayMillis позволяют выполнить Runnable в котором будет наш код с определенной задержкой. Сама задержка задается в миллисекундах.

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // код выполняющийся после 5 секунд
    }
}, 5000);

Для более удобной записи задержки в пять секунд лучше использовать класс TimeUnit, который позволяет выбрать единицы измерения времени и сделать простым преобразование единиц времени, например преобразовать секунды в миллисекунды. В следующем примере мы рассмотрим как лучше задавать задержку.

Handler handler = new Handler();
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // код выполняющийся после 5 секунд
    }
}, TimeUnit.SECONDS.toMillis(5));

Такая запись задержки будет выглядит больше, но гораздо лучше с точки зрения понимания. Можно определить константу если это улучшит читаемость и понимание кода.

Если вы хотите чтобы событие всегда приходило в главной поток Android приложения, то инициализируйте Handler передавая Looper главного потока с помощью статического метода Looper.getMainLooper() в конструктор и тем самым явно задав отправку всех сообщений в главный поток.

Handler handler = new Handler(Looper.getMainLooper());

Теперь все сообщения будут приходит с задержкой только в главный поток.

Обратите внимание в каком потоке создается Handler

По умолчанию сообщения отправляются в поток в котором был создан экземпляр класса Handler. Поэтому нужно следить в каком потоке вы создаете Handler или явно передавать Looper главного потока в конструктор.

Мы рассмотрели способ как можно вызвать метод с задержкой, а также как задать отправление сообщений только в главный поток и почему важно знать в каком потоке создается Handler.

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

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