Fixed
Status Update
Comments
ra...@google.com <ra...@google.com> #2
Can you include a sample project that crashes in release mode?
ap...@google.com <ap...@google.com> #3
For us this is only happening in places where LifecycleEventEffect
is used. Example stacktrace:
Fatal Exception: java.lang.IllegalStateException
CompositionLocal LocalLifecycleOwner not present
androidx.lifecycle.compose.LocalLifecycleOwnerKt$LocalLifecycleOwner$1$1.invoke (LocalLifecycleOwner.android.kt:63)
androidx.lifecycle.compose.LocalLifecycleOwnerKt$LocalLifecycleOwner$1$1.invoke (LocalLifecycleOwner.android.kt:62)
kotlin.SynchronizedLazyImpl.getValue (LazyJVM.kt:74)
androidx.compose.runtime.LazyValueHolder.getCurrent (LazyValueHolder.java:29)
androidx.compose.runtime.LazyValueHolder.getValue (LazyValueHolder.java:31)
androidx.compose.runtime.CompositionLocalMapKt.read (CompositionLocalMap.kt:90)
androidx.compose.runtime.ComposerImpl.consume (Composer.kt:2135)
androidx.lifecycle.compose.LifecycleEffectKt.LifecycleEventEffect (LifecycleEffect.kt:748)
com.freeletics.feature.profile.ProfileUiKt$ProfileUi$1.invoke (ProfileUi.kt:62)
This is also on Lifecycle 2.8.2 with Compose 1.6.
[Deleted User] <[Deleted User]> #4
Here is a sample project
- Checkout repository
- Build release apk with ./gradlew :app:assembleRelease -PenableReleaseSigning=true
- App starts without crash
- Comment or remove line 14 in
https://github.com/nilsjr/Koncept/blob/develop/app/proguard-rules.pro - Build release apk with ./gradlew :app:assembleRelease -PenableReleaseSigning=true
- App crashing on start
FATAL EXCEPTION: main (Ask Gemini)
Process: de.nilsdruyen.koncept, PID: 5880
java.lang.IllegalStateException: CompositionLocal LocalLifecycleOwner not present
...
Description
Version used: alpha09
Devices/Android versions reproduced on:
When using WorkContinuation.combine to join multiple works before continuing, it has a check in it to make sure it's acutally combining multiple WorkContinuations. I think this check is uneccessary and annoying, and adds a hard to find bug in implementations. The combine() method could easily just do nothing if there's only a single WorkContinuation passed to it.
Current use case:
I'm uploading a number of photos, which I'm splitting into a number of WorkContinuation lists so that several happen in parallel. If I only have one photo to upload then obviously I can only split this into one list of work, and the app crashes because WorkContinuation.combine() 'cannot' combine a single item. To fix this I have to have this code:
```
val allCombined = if (workLists.size == 1) workLists[0] else WorkContinuation.combine(workLists)
allCombined.then(....
```
which is much less nice than the original code which I think should work:
```
WorkContinuation.combine(workLists)
.then(....
```