# LifecycleStartEffect

Common/All

## Functions summary

|---|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable [LifecycleStartEffect](https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(androidx.lifecycle.LifecycleOwner,kotlin.Function1))( lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner, effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult )` **This function is deprecated.** LifecycleStartEffect must provide one or more 'key' parameters that define the identity of the LifecycleStartEffect and determine when its previous effect coroutine should be cancelled and a new effect launched for the new key. | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)( key1: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner, effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult )` Schedule a pair of effects to run when the `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle` receives either a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` (or any new unique value of `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`). | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)( vararg keys: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner, effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult )` Schedule a pair of effects to run when the `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle` receives either a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` (or any new unique value of `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`). | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)( key1: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, key2: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner, effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult )` Schedule a pair of effects to run when the `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle` receives either a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` (or any new unique value of `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`). | Cmn |
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)( key1: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, key2: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, key3: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?, lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner, effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult )` Schedule a pair of effects to run when the `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle` receives either a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` (or any new unique value of `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`). | Cmn |

## Functions

### LifecycleStartEffect

Cmn Artifact: [androidx.lifecycle:lifecycle-runtime-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/compose/LifecycleEffect.kt+function:LifecycleStartEffect)

```
@Composable
fun [LifecycleStartEffect](https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(androidx.lifecycle.LifecycleOwner,kotlin.Function1))(
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    effects: LifecycleStartStopEffectScope.() -> LifecycleStopOrDisposeEffectResult
): Unit
```

> [!CAUTION]
> **This function is deprecated.**   
> LifecycleStartEffect must provide one or more 'key' parameters that define the identity of the LifecycleStartEffect and determine when its previous effect coroutine should be cancelled and a new effect launched for the new key.

It is an error to call `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(androidx.lifecycle.LifecycleOwner,kotlin.Function1)` without at least one `key` parameter.

This deprecated-error function shadows the varargs overload so that the varargs version is not used without key parameters.

| See also |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(androidx.lifecycle.LifecycleOwner,kotlin.Function1)` |   |

### LifecycleStartEffect

Cmn Artifact: [androidx.lifecycle:lifecycle-runtime-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/compose/LifecycleEffect.kt+function:LifecycleStartEffect)

```
@Composable
fun LifecycleStartEffect(
    key1: Any?,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    effects: LifecycleStartStopEffectScope.() -> LifecycleStopOrDisposeEffectResult
): Unit
```

Schedule a pair of effects to run when the `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle` receives either a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` (or any new unique value of `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`). The ON_START effect will be the body of the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` block and the ON_STOP effect will be within the (onStopOrDispose clause)`https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)`:

```kotlin
LifecycleStartEffect(lifecycleOwner) {
    // add ON_START effect here

    onStopOrDispose {
        // add clean up for work kicked off in the ON_START effect here
    }
}
```

```kotlin
import androidx.compose.runtime.Composable
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleStartEffect

@Composable
fun Analytics(dataAnalytics: DataAnalytics) {
    LifecycleStartEffect(dataAnalytics) {
        val timeTracker = dataAnalytics.startTimeTracking()

        onStopOrDispose { timeTracker.stopTimeTracking() }
    }

    // ...
}
```

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` **must** include an `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` clause as the final statement in its `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` block. If your operation does not require an effect for *both* `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` and `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP`, a `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleEventEffect.composable#LifecycleEventEffect(androidx.lifecycle.Lifecycle.Event,androidx.lifecycle.LifecycleOwner,kotlin.Function0)` should be used instead.

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`'s *key* is a value that defines the identity of the effect. If the key changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` must `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` its current `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` and reset by calling `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` again. Examples of keys include:

- Observable objects that the effect subscribes to

- Unique request parameters to an operation that must cancel and retry if those parameters change

This function uses a `https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleEventObserver` to listen for when `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` enters the composition and the effects will be launched when receiving a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` event, respectively. If the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` leaves the composition prior to receiving an `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` event, `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` will be called to clean up the work that was kicked off in the ON_START effect.

This function should **not** be used to launch tasks in response to callback events by way of storing callback data as a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State` in a `https://developer.android.com/reference/kotlin/androidx/compose/runtime/MutableState`. Instead, see `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/currentStateAsState.composable#(androidx.lifecycle.Lifecycle).currentStateAsState()` to obtain a `https://developer.android.com/reference/kotlin/androidx/compose/runtime/State` that may be used to launch jobs in response to state changes.

| Parameters |
|---|---|
| `key1: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | The unique value to trigger recomposition upon change |
| `lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner = LocalLifecycleOwner.current` | The lifecycle owner to attach an observer |
| `effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult` | The effects to be launched when we receive the respective event callbacks |

### LifecycleStartEffect

Cmn Artifact: [androidx.lifecycle:lifecycle-runtime-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/compose/LifecycleEffect.kt+function:LifecycleStartEffect)

```
@Composable
fun LifecycleStartEffect(
    vararg keys: Any?,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    effects: LifecycleStartStopEffectScope.() -> LifecycleStopOrDisposeEffectResult
): Unit
```

Schedule a pair of effects to run when the `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle` receives either a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` (or any new unique value of `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`). The ON_START effect will be the body of the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` block and the ON_STOP effect will be within the (onStopOrDispose clause)`https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)`:

```kotlin
LifecycleStartEffect(lifecycleOwner) {
    // add ON_START effect here

    onStopOrDispose {
        // add clean up for work kicked off in the ON_START effect here
    }
}
```

```kotlin
import androidx.compose.runtime.Composable
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleStartEffect

@Composable
fun Analytics(dataAnalytics: DataAnalytics) {
    LifecycleStartEffect(dataAnalytics) {
        val timeTracker = dataAnalytics.startTimeTracking()

        onStopOrDispose { timeTracker.stopTimeTracking() }
    }

    // ...
}
```

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` **must** include an `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` clause as the final statement in its `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` block. If your operation does not require an effect for *both* `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` and `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP`, a `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleEventEffect.composable#LifecycleEventEffect(androidx.lifecycle.Lifecycle.Event,androidx.lifecycle.LifecycleOwner,kotlin.Function0)` should be used instead.

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`'s *key* is a value that defines the identity of the effect. If a key changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` must `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` its current `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` and reset by calling `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` again. Examples of keys include:

- Observable objects that the effect subscribes to

- Unique request parameters to an operation that must cancel and retry if those parameters change

This function uses a `https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleEventObserver` to listen for when `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` enters the composition and the effects will be launched when receiving a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` event, respectively. If the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Array,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` leaves the composition prior to receiving an `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` event, `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` will be called to clean up the work that was kicked off in the ON_START effect.

This function should **not** be used to launch tasks in response to callback events by way of storing callback data as a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State` in a `https://developer.android.com/reference/kotlin/androidx/compose/runtime/MutableState`. Instead, see `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/currentStateAsState.composable#(androidx.lifecycle.Lifecycle).currentStateAsState()` to obtain a `https://developer.android.com/reference/kotlin/androidx/compose/runtime/State` that may be used to launch jobs in response to state changes.

| Parameters |
|---|---|
| `vararg keys: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | The unique values to trigger recomposition upon changes |
| `lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner = LocalLifecycleOwner.current` | The lifecycle owner to attach an observer |
| `effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult` | The effects to be launched when we receive the respective event callbacks |

### LifecycleStartEffect

Cmn Artifact: [androidx.lifecycle:lifecycle-runtime-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/compose/LifecycleEffect.kt+function:LifecycleStartEffect)

```
@Composable
fun LifecycleStartEffect(
    key1: Any?,
    key2: Any?,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    effects: LifecycleStartStopEffectScope.() -> LifecycleStopOrDisposeEffectResult
): Unit
```

Schedule a pair of effects to run when the `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle` receives either a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` (or any new unique value of `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`). The ON_START effect will be the body of the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` block and the ON_STOP effect will be within the (onStopOrDispose clause)`https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)`:

```kotlin
LifecycleStartEffect(lifecycleOwner) {
    // add ON_START effect here

    onStopOrDispose {
        // add clean up for work kicked off in the ON_START effect here
    }
}
```

```kotlin
import androidx.compose.runtime.Composable
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleStartEffect

@Composable
fun Analytics(dataAnalytics: DataAnalytics) {
    LifecycleStartEffect(dataAnalytics) {
        val timeTracker = dataAnalytics.startTimeTracking()

        onStopOrDispose { timeTracker.stopTimeTracking() }
    }

    // ...
}
```

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` **must** include an `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` clause as the final statement in its `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` block. If your operation does not require an effect for *both* `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` and `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP`, a `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleEventEffect.composable#LifecycleEventEffect(androidx.lifecycle.Lifecycle.Event,androidx.lifecycle.LifecycleOwner,kotlin.Function0)` should be used instead.

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`'s *key* is a value that defines the identity of the effect. If a key changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` must `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` its current `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` and reset by calling `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` again. Examples of keys include:

- Observable objects that the effect subscribes to

- Unique request parameters to an operation that must cancel and retry if those parameters change

This function uses a `https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleEventObserver` to listen for when `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` enters the composition and the effects will be launched when receiving a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` event, respectively. If the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` leaves the composition prior to receiving an `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` event, `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` will be called to clean up the work that was kicked off in the ON_START effect.

This function should **not** be used to launch tasks in response to callback events by way of storing callback data as a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State` in a `https://developer.android.com/reference/kotlin/androidx/compose/runtime/MutableState`. Instead, see `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/currentStateAsState.composable#(androidx.lifecycle.Lifecycle).currentStateAsState()` to obtain a `https://developer.android.com/reference/kotlin/androidx/compose/runtime/State` that may be used to launch jobs in response to state changes.

| Parameters |
|---|---|
| `key1: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | A unique value to trigger recomposition upon change |
| `key2: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | A unique value to trigger recomposition upon change |
| `lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner = LocalLifecycleOwner.current` | The lifecycle owner to attach an observer |
| `effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult` | The effects to be launched when we receive the respective event callbacks |

### LifecycleStartEffect

Cmn Artifact: [androidx.lifecycle:lifecycle-runtime-compose](https://developer.android.com/jetpack/androidx/releases/lifecycle) [View Source](https://cs.android.com/search?q=file:androidx/lifecycle/compose/LifecycleEffect.kt+function:LifecycleStartEffect)

```
@Composable
fun LifecycleStartEffect(
    key1: Any?,
    key2: Any?,
    key3: Any?,
    lifecycleOwner: LifecycleOwner = LocalLifecycleOwner.current,
    effects: LifecycleStartStopEffectScope.() -> LifecycleStopOrDisposeEffectResult
): Unit
```

Schedule a pair of effects to run when the `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle` receives either a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` (or any new unique value of `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`). The ON_START effect will be the body of the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` block and the ON_STOP effect will be within the (onStopOrDispose clause)`https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)`:

```kotlin
LifecycleStartEffect(lifecycleOwner) {
    // add ON_START effect here

    onStopOrDispose {
        // add clean up for work kicked off in the ON_START effect here
    }
}
```

```kotlin
import androidx.compose.runtime.Composable
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.compose.LifecycleStartEffect

@Composable
fun Analytics(dataAnalytics: DataAnalytics) {
    LifecycleStartEffect(dataAnalytics) {
        val timeTracker = dataAnalytics.startTimeTracking()

        onStopOrDispose { timeTracker.stopTimeTracking() }
    }

    // ...
}
```

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` **must** include an `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` clause as the final statement in its `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` block. If your operation does not require an effect for *both* `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` and `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP`, a `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleEventEffect.composable#LifecycleEventEffect(androidx.lifecycle.Lifecycle.Event,androidx.lifecycle.LifecycleOwner,kotlin.Function0)` should be used instead.

A `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)`'s *key* is a value that defines the identity of the effect. If a key changes, the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` must `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` its current `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` and reset by calling `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/package-summary#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` again. Examples of keys include:

- Observable objects that the effect subscribes to

- Unique request parameters to an operation that must cancel and retry if those parameters change

This function uses a `https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleEventObserver` to listen for when `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` enters the composition and the effects will be launched when receiving a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_START` or `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` event, respectively. If the `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartEffect.composable#LifecycleStartEffect(kotlin.Any,kotlin.Any,kotlin.Any,androidx.lifecycle.LifecycleOwner,kotlin.Function1)` leaves the composition prior to receiving an `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.Event#ON_STOP` event, `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope#onStopOrDispose(kotlin.Function1)` will be called to clean up the work that was kicked off in the ON_START effect.

This function should **not** be used to launch tasks in response to callback events by way of storing callback data as a `https://developer.android.com/reference/kotlin/androidx/lifecycle/Lifecycle.State` in a `https://developer.android.com/reference/kotlin/androidx/compose/runtime/MutableState`. Instead, see `https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/currentStateAsState.composable#(androidx.lifecycle.Lifecycle).currentStateAsState()` to obtain a `https://developer.android.com/reference/kotlin/androidx/compose/runtime/State` that may be used to launch jobs in response to state changes.

| Parameters |
|---|---|
| `key1: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | The unique value to trigger recomposition upon change |
| `key2: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | The unique value to trigger recomposition upon change |
| `key3: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | The unique value to trigger recomposition upon change |
| `lifecycleOwner: https://developer.android.com/reference/kotlin/androidx/lifecycle/LifecycleOwner = LocalLifecycleOwner.current` | The lifecycle owner to attach an observer |
| `effects: https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStartStopEffectScope.() -> https://developer.android.com/reference/kotlin/androidx/lifecycle/compose/LifecycleStopOrDisposeEffectResult` | The effects to be launched when we receive the respective event callbacks |