# IdlingResource

Artifact: [androidx.test.espresso:espresso-idling-resource](https://developer.android.com/jetpack/androidx/releases/test-espresso) [View Source](https://cs.android.com/search?q=file:androidx/test/espresso/IdlingResource.java+class:androidx.test.espresso.IdlingResource)

*** ** * ** ***


```
public interface IdlingResource
```

<br />

Known direct subclasses [CountingIdlingResource](https://developer.android.com/reference/androidx/test/espresso/idling/CountingIdlingResource), [IdlingScheduledThreadPoolExecutor](https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor), [IdlingThreadPoolExecutor](https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingThreadPoolExecutor), [UriIdlingResource](https://developer.android.com/reference/androidx/test/espresso/idling/net/UriIdlingResource)

|---|---|
| `https://developer.android.com/reference/androidx/test/espresso/idling/CountingIdlingResource` | An implementation of `https://developer.android.com/reference/androidx/test/espresso/IdlingResource` that determines idleness by maintaining an internal counter. |
| `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingScheduledThreadPoolExecutor` | A `https://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html` that can be registered as an `https://developer.android.com/reference/androidx/test/espresso/IdlingResource` with Espresso. |
| `https://developer.android.com/reference/androidx/test/espresso/idling/concurrent/IdlingThreadPoolExecutor` | A `https://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html` that can be registered as an `https://developer.android.com/reference/androidx/test/espresso/IdlingResource` with Espresso. |
| `https://developer.android.com/reference/androidx/test/espresso/idling/net/UriIdlingResource` | An implementation of `https://developer.android.com/reference/androidx/test/espresso/IdlingResource` useful for monitoring idleness of network traffic. |

*** ** * ** ***

Represents a resource of an application under test which can cause asynchronous background work to happen during test execution (e.g. an intent service that processes a button click). By default, `https://developer.android.com/reference/androidx/test/espresso/Espresso` synchronizes all view operations with the UI thread as well as AsyncTasks; however, it has no way of doing so with "hand-made" resources. In such cases, test authors can register the custom resource via `https://developer.android.com/reference/androidx/test/espresso/IdlingRegistry` and `https://developer.android.com/reference/androidx/test/espresso/Espresso` will wait for the resource to become idle prior to executing a view operation.

**Important Note:** it is assumed that the resource stays idle most of the time.

**Note:** before writing your implementation consider using `https://developer.android.com/reference/androidx/test/espresso/idling/CountingIdlingResource` instead.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback` Registered by an `https://developer.android.com/reference/androidx/test/espresso/IdlingResource` to notify Espresso of a transition to idle. |

| ### Public methods |
|---|---|
| `abstract https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/test/espresso/IdlingResource#getName()()` Returns the name of the resources (used for logging and idempotency of registration). |
| `abstract boolean` | `https://developer.android.com/reference/androidx/test/espresso/IdlingResource#isIdleNow()()` Returns `true` if resource is currently idle. |
| `abstract void` | `https://developer.android.com/reference/androidx/test/espresso/IdlingResource#registerIdleTransitionCallback(androidx.test.espresso.IdlingResource.ResourceCallback)( https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback callback )` Registers the given `https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback` with the resource. |

## Public methods

### getName

```
abstract String getName()
```

Returns the name of the resources (used for logging and idempotency of registration).

### isIdleNow

```
abstract boolean isIdleNow()
```

Returns `true` if resource is currently idle. Espresso will **always** call this method from the main thread, therefore it should be non-blocking and return immediately.

### registerIdleTransitionCallback

```
abstract void registerIdleTransitionCallback(
    IdlingResource.ResourceCallback callback
)
```

Registers the given `https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback` with the resource. Espresso will call this method:

- with its implementation of `https://developer.android.com/reference/androidx/test/espresso/IdlingResource.ResourceCallback` so it can be notified asynchronously that your resource is idle
- from the main thread, but you are free to execute the callback's onTransitionToIdle from any thread
- once (when it is initially given a reference to your IdlingResource)

You only need to call this upon transition from busy to idle - if the resource is already idle when the method is called invoking the call back is optional and has no significant impact.