# Improve IMA load time

The IMA SDK loads dependencies to request Dynamic Ad Insertion (DAI) streams,
measure viewability and report ad impressions. By initializing IMA before you
make a stream request, you maximize the time to load IMA dependencies before
stream playback. This page covers how to handling IMA load times in your app.

## Call `ImaSdkFactory.initialize()`

The
[`ImaSdkFactory.initialize()`](https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkFactory#initialize(android.content.Context,com.google.ads.interactivemedia.v3.api.ImaSdkSettings))
method starts to preload SDK resources in advance of the first stream request.
To use `initialize()`, you need IMA version 3.35.1 or higher.

Call `ImaSdkFactory.initialize()` on application startup, or as early in the
application's lifecycle as your app structure allows. The `initialize()` call
takes the following parameters:

- **`context`**: Uses the application context, which is always available during the lifecycle of the application.
- **`settings`** : Pass the an [`ImaSdkSettings`](https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/ImaSdkSettings) object with its values set. The IMA settings used in the `initialize()` call must be the same as the settings values used in the `createAdsLoader()` call. The IMA SDK utilizes these settings, particularly the language setting, for cache key. We don't recommend using test or fake values for the settings used in the `initialize()` method call, as cache misses might occur and increase ad load time.

## Reuse the `AdsLoader` instance

To improve IMA load time, we recommend you reuse the same
[`AdsLoader`](https://developers.google.com/interactive-media-ads/docs/sdks/android/client-side/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader)
instance. The `AdsLoader` interface can handle multiple ad or stream requests.
Avoid creating a new `AdsLoader` instance for each request. Creating a new
`AdsLoader` instance requires a load time, and uses additional device resources.

## Request streams in advance of playback

If you have access to the `AdsLoader` instance prior to starting stream
playback, you can also call the
[`AdsLoader.requestStream()`](https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/AdsLoader#requestStream(com.google.ads.interactivemedia.v3.api.StreamRequest))
method early. Making this call starts loading the DAI stream. When the user
is ready to start stream playback, call the
[`StreamManager.init()`](https://developers.google.com/ad-manager/dynamic-ad-insertion/sdk/android/api/reference/com/google/ads/interactivemedia/v3/api/BaseManager#init())
method to initialize stream playback.