9

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

7

Я хочу иметь возможность вызывать следующий метод с заданной задержкой. В Objective-C существовал аналогичный способ:

[self performSelector:@selector(DoSomething) withObject:nil afterDelay:5];

Есть ли эквивалент этого метода в Android с использованием Java? Например, мне нужно вызвать метод через 5 секунд.

public void DoSomething() {
    // что-то сделать здесь
}

5 ответ(ов)

22

Kotlin

Handler(Looper.getMainLooper()).postDelayed({
    // Выполнить что-то через 100мс
}, 100)

Java

final Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // Выполнить что-то через 100мс
    }
}, 100);

Импортируемый класс - android.os.Handler.

Это пример использования Handler для выполнения кода с задержкой в 100 миллисекунд на основном потоке. В Kotlin мы используем лямбда-выражение, а в Java - анонимный класс.

3

Я не смог использовать ни один из других ответов в моем случае. Вместо этого я использовал встроенный таймер Java.

new Timer().schedule(new TimerTask() {          
    @Override
    public void run() {
        // этот код будет выполнен через 2 секунды       
    }
}, 2000);
1

Для выполнения каких-либо действий в основном потоке (UI потоке) через 5 секунд, вы можете использовать следующий код:

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        // Выполните здесь необходимые действия
    }
}, 5000);

Этот код создает новый объект Handler, связанный с основным потоком, и использует метод postDelayed для выполнения заданной задачи через 5000 миллисекунд (или 5 секунд). Внутри метода run() вы можете разместить необходимую логику, которую хотите выполнить по истечении указанного времени.

0

Kotlin и Java: несколько способов задержки выполнения

1. Использование Handler

Handler().postDelayed({
    TODO("Сделайте что-то")
}, 2000)

2. Использование TimerTask

Timer().schedule(object : TimerTask() {
    override fun run() {
        TODO("Сделайте что-то")
    }
}, 2000)

Или еще короче:

Timer().schedule(timerTask {
    TODO("Сделайте что-то")
}, 2000)

Самый короткий вариант:

Timer().schedule(2000) {
    TODO("Сделайте что-то")
}

3. Использование Executors

Executors.newSingleThreadScheduledExecutor().schedule({
    TODO("Сделайте что-то")
}, 2, TimeUnit.SECONDS)

На Java

1. Использование Handler

new Handler().postDelayed(new Runnable() {
    @Override
    public void run() {
        // Сделайте что-то
    }
}, 2000);

2. Использование Timer

new Timer().schedule(new TimerTask() {          
    @Override
    public void run() {
        // Сделайте что-то
    }
}, 2000);

3. Использование ScheduledExecutorService

private static final ScheduledExecutorService worker = Executors.newSingleThreadScheduledExecutor();

Runnable runnable = new Runnable() {
    public void run() {
        // Сделайте что-то
    }
};
worker.schedule(runnable, 2, TimeUnit.SECONDS);
0

Вы можете использовать Handler внутри основного (UI) потока:

runOnUiThread(new Runnable() {
    @Override
    public void run() {
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                // добавьте ваш код здесь
            }
        }, 1000);
    }
});

В данном примере runOnUiThread гарантирует, что указанный код будет выполнен в основном потоке приложения. Handler создается внутри этого потока и используется для отложенного выполнения кода через 1000 миллисекунд (1 секунду).

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь