An Android app for comparing LaunchedEffect, DisposableEffect and rememberUpdatedState. Change keys and composition presence, then read the start, cancellation and cleanup events. The examples run locally without an analytics service.
- Open LaunchedEffect, insert the effect, change its key and remove it. Compare
startandcancelevents. - Open Latest value, start the three-second delivery and change the message during the wait. The latest value is delivered without restarting the effect. You can repeat delivery.
- Register a listener in DisposableEffect. Change its resource key and release it. GPS, Lifecycle and Sensor are names of simulated resources; no location or sensor data is read.
- In Cases, keep the same screen ID in composition for two seconds to record a fictional event. Changing the ID cancels the earlier wait. The lifecycle observer uses the actual LifecycleOwner and is removed when its example leaves composition.
Scrolling does not remove an experiment from composition. Changing its key, removing it or leaving its tab still cancels/releases its work. Event log clearing only removes recorded events.
Use JDK 17, Android SDK 36 and API 26+ for installation. Open the project in Android Studio or configure the SDK in an untracked local.properties. From this directory:
./gradlew :app:testDebugUnitTest :app:lintDebug :app:assembleDebug
./gradlew :app:installDebugThe Gradle 8.13 wrapper verifies its distribution SHA-256. Dependencies are pinned in gradle/libs.versions.toml. Native test locale rules require API 33+; replace DEVICE_ID with an explicit serial:
ANDROID_SERIAL=DEVICE_ID ./gradlew :app:connectedDebugAndroidTest- EffectDemos.kt: keyed coroutine, listener lifetime and latest callback probes.
- ComposeEffectLabApp.kt: controls, effect ownership outside lazy cells and the two practical cases.
- FakeListenerRegistry.kt: simulated registration handles.
- EffectEventRecorder.kt: ordered event snapshots.
- EffectScreenTest.kt: scrolling, replacement, repeated delivery and listener release.
Pure JVM tests cover the recorder/registry. Instrumented Compose tests inspect lifecycle behavior; the real-entry test launches MainActivity separately from screen probes. Raw API/probe messages remain stable so they can be matched to code.
Detailed Spanish guides:
The suite contains 4 JVM tests and 9 native tests. Verification records dated runs, screenshots, audit warnings and the difference between local native coverage and hosted CI. DESIGN.md explains the interface.
Spanish resources have an English fallback. No physical-device, formal accessibility, optimized-release or store result is claimed. Existing licenses and font/dependency attribution remain in third-party notices.
