How to Call a Method After a Delay in Android

How to Call a Method After a Delay in Android

22 May 2024 Stephan Petzl Leave a comment Tech-Help

In Android development, there are various scenarios where you may need to execute a method after a specified delay. This article will guide you through the most effective ways to achieve this in both Java and Kotlin.

Using Handler and Runnable

The most common and straightforward method to execute code after a delay is by using the Handler class along with Runnable. This method is particularly useful for UI-related tasks.

Java Example

final Handler handler = new Handler(Looper.getMainLooper());
handler.postDelayed(new Runnable() {
    @Override
    public void run() {
        // Do something after 100ms
    }
}, 100);

Kotlin Example

Handler(Looper.getMainLooper()).postDelayed({
    // Do something after 100ms
}, 100)

Using Timer and TimerTask

If you prefer using Java’s native Timer class, you can achieve similar functionality. This method is useful for background tasks that don’t directly interact with the UI.

new Timer().schedule(new TimerTask() {          
    @Override
    public void run() {
        // This code will be executed after 2 seconds       
    }
}, 2000);

Using ScheduledExecutorService

The ScheduledExecutorService is part of the java.util.concurrent package and offers a more robust solution for scheduling tasks.

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

void someMethod() {
  Runnable task = new Runnable() {
    public void run() {
      // Do something
    }
  };
  worker.schedule(task, 5, TimeUnit.SECONDS);
}

Using Kotlin Coroutines

Kotlin coroutines provide a modern and efficient way to handle delays, especially when working within Android’s lifecycle-aware components.

lifecycleScope.launch { 
  delay(5000)
  doSomething()
}

In a ViewModel, you can use the viewModelScope:

viewModelScope.launch {
  delay(5000)
  doSomething()
}

Best Practices

While implementing delayed executions, especially in UI threads, it’s crucial to manage the lifecycle of your components to avoid memory leaks or crashes. Always ensure that your delayed tasks are canceled or cleaned up during the appropriate lifecycle events, such as onPause() or onDestroy().

Additional Resources

For more detailed guides and advanced techniques, check out our related articles:

Enhancing Your Testing Workflow

When it comes to mobile app development, automated testing is essential for ensuring the reliability and performance of your applications. Repeato is a No-code test automation tool for iOS and Android that simplifies the process of creating, running, and maintaining automated tests. Its computer vision and AI capabilities make it particularly fast to edit and run tests, allowing developers to focus more on creating great products.

With Repeato, you can also delegate test automation tasks to non-technical colleagues or QA teams, streamlining your development workflow. Learn more about how Repeato can benefit your projects by visiting our blog or exploring our documentation.

Like this article? there’s more where that came from!