Fixed
Status Update
Comments
ra...@google.com <ra...@google.com>
ra...@google.com <ra...@google.com> #2
Yigit, do you have time to fix it?
reemission of the same liveData is racy
reemission of the same liveData is racy
lb...@gmail.com <lb...@gmail.com> #3
yea i'll take it.
su...@google.com <su...@google.com> #4
Thanks for the detailed analysis. This may not be an issue anymore since we've started using Main.immediate there but I' not sure; I'll try to create a test case.
lb...@gmail.com <lb...@gmail.com> #5
just emitting same live data reproduces the issue.
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
@Test
fun raceTest() {
val subLiveData = MutableLiveData(1)
val subject = liveData(testScope.coroutineContext) {
emitSource(subLiveData)
emitSource(subLiveData) //crashes
}
subject.addObserver().apply {
testScope.advanceUntilIdle()
}
}
Description
Version used:
implementation "android.arch.work:work-runtime-ktx:1.0.0-alpha04"
implementation "android.arch.work:work-firebase:1.0.0-alpha04"
But also the Java one
Devices/Android versions reproduced on:
Nexus 4 with Android 4.4.4
If this is a bug in the library, we would appreciate if you could attach:
- Sample project to trigger the issue.
Attached
- A screenrecord or screenshots showing the issue (if UI related).
Attached.
The bug is that on newer Android versions, the schedule works fine, yet here on this Android version, the work never gets called.
In the sample, I've scheduled it to run in 30 seconds:
workManager.enqueue(OneTimeWorkRequest.Builder(SampleJob::class.java).addTag(schedultedTag).setInitialDelay(30, TimeUnit.SECONDS).build())
Steps for reproducing the bug:
1. Just press on "schedule job in 30 sec" button.
2. You can wait 30 seconds or even a lot more time, and it won't be launched. I've set that a toast and log will b shown. Nothing occurs.
If I remove the delay, it works fine :
workManager.enqueue(OneTimeWorkRequest.Builder(SampleJob::class.java).addTag(normalJobTag).build())
Same goes if I remove the Firebase usage:
implementation "android.arch.work:work-firebase:1.0.0-alpha04"