Status Update
Comments
hu...@gmail.com <hu...@gmail.com> #2
ra...@google.com <ra...@google.com> #3
Is there a public repo somewhere? I don't see any obvious repo for it in
Room supports final fields (yay!), which probably will suffice for many people with respect to this feature request.
hu...@gmail.com <hu...@gmail.com> #4
Sorry we don't have the source release yet :/.
hu...@gmail.com <hu...@gmail.com> #5
"Sorry we don't have the source release yet :/." -- ah, OK, I thought perhaps with the pull request comment, that meant that there was a repo somewhere that I had overlooked.
Thanks!
ra...@google.com <ra...@google.com> #6
ra...@google.com <ra...@google.com> #7
hu...@gmail.com <hu...@gmail.com> #8
ra...@google.com <ra...@google.com>
ra...@google.com <ra...@google.com> #9
su...@google.com <su...@google.com> #10
hu...@gmail.com <hu...@gmail.com> #11
hu...@gmail.com <hu...@gmail.com> #12
su...@google.com <su...@google.com>
su...@google.com <su...@google.com> #13
hu...@gmail.com <hu...@gmail.com> #14
hu...@gmail.com <hu...@gmail.com> #15
su...@google.com <su...@google.com> #16
I want to make 1 thing clear though, Room does support immutable entities. One of the reasons why this ticket lost some priority is that it is specific to AutoValue, not immutability. If you are using Kotlin, data classes give you the same power and Room supports them properly. (hence, there is an easy way to achieve immutability w/ Room).
The issue in this one is that we don't have out of the box support to discover AutoValue builders.
We still plan to do this, sorry that it is taking longer than we initially communicated.
hu...@gmail.com <hu...@gmail.com> #17
Let's say I have a Kotlin data class with only `val` properties. I want to serialize this into my Room database, but I want to decorate it with a few other values, for example a timestamp so I know when it was last updated, and a userId because my database supports multiple users. Oh look! There's an annotation `@Embedded` that seems to do just want I want. I can create a new class specific to Room persistence, add the few new properties I want, and then "embed" the original object, and damn that was easy.
Oh no. Now my project won't compile. It seems that embedded objects must have public getters -- all my `val`s must now be `var`s. D:
Sigh. I guess I'll just write a new class that has _all_ the properties of the original, plus a few more, and write an extension function to transform from one to the other. Really glad Room saved me all that Sqlite boilerplate, so I now have time for Room-specific boilerplate ;-)
hu...@gmail.com <hu...@gmail.com> #18
ra...@google.com <ra...@google.com> #19
Can you file a bug with a sample project ?
We do have a test for having embedded as a constructor parameter, so maybe something else is wrong.
from one of our tests:
@Entity(tableName = "fc")
static class FullConstructor {
@PrimaryKey
public final int a;
public final int b;
@Embedded
public final MyEmbedded embedded;
FullConstructor(int a, int b, MyEmbedded embedded) {
this.a = a;
this.b = b;
this.embedded = embedded;
}
}
hu...@gmail.com <hu...@gmail.com> #20
hu...@gmail.com <hu...@gmail.com> #21
ra...@google.com <ra...@google.com>
ne...@gmail.com <ne...@gmail.com> #22
su...@google.com <su...@google.com> #23
Branch: androidx-master-dev
commit 8c2d348127161daaf624f77d80cb662e65e3af2a
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Fri Jul 13 15:18:42 2018
Add support for using AutoValue classes as Pojos and Entities.
Support using AutoValue generated classes as Pojos by processing the
AutoValue_* generated class that contains fields and getter
implementations.
To support the AutoValue api @PrimaryKey and @ColumnInfo have been
opened up to target methods. However, since we only want to allow their
usage in methods to support AutoValue a new processing step was added
that throws an error if it finds a method not implement by AutoValue
with any of these two annotations.
Note that Embedded and Relations are not yet supported.
Bug: 62408420
Test: ./gradlew :room:room-compiler:test \
:room:integration-tests:testapp:cC \
:room:integration-tests:autovaluetestapp:cC
Change-Id: I782d6ec074776f7af7cae977848443f3311b1d87
M app-toolkit/settings.gradle
M buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
M room/common/src/main/java/androidx/room/ColumnInfo.java
M room/common/src/main/java/androidx/room/PrimaryKey.java
M room/compiler/build.gradle
M room/compiler/src/main/kotlin/androidx/room/RoomProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/checker/AutoValueTargetChecker.kt
M room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
M room/compiler/src/main/kotlin/androidx/room/processor/EntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
M room/compiler/src/main/kotlin/androidx/room/processor/RawQueryMethodProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/processor/autovalue/AutoValuePojoProcessorDelegate.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Constructor.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Warning.kt
M room/compiler/src/main/kotlin/androidx/room/writer/FieldReadWriteWriter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/EntityProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/autovalue/AutoValuePojoProcessorDelegateTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/checker/AutoValueTargetCheckerTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
A room/integration-tests/autovaluetestapp/.gitignore
A room/integration-tests/autovaluetestapp/build.gradle
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/TestDatabase.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/ParcelableEntityDao.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/PersonDao.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/PetDao.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/ParcelableEntityDaoTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/PersonDaoTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/PetDaoTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/TestDatabaseTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/EmbeddedAutoValue.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/ParcelableEntity.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/Person.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/Pet.java
A room/integration-tests/autovaluetestapp/src/main/AndroidManifest.xml
M settings.gradle
ra...@google.com <ra...@google.com> #24
Branch: androidx-master-dev
commit 038e674add5afddbb34371b9c1fda6885efbd7be
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Fri Jul 13 15:18:42 2018
Add support for using AutoValue classes as Pojos and Entities.
Support using AutoValue generated classes as Pojos by processing the
AutoValue_* generated class that contains fields and getter
implementations.
To support the AutoValue api @PrimaryKey and @ColumnInfo have been
opened up to target methods. However, since we only want to allow their
usage in methods to support AutoValue a new processing step was added
that throws an error if it finds a method not implement by AutoValue
with any of these two annotations.
Note that Embedded and Relations are not yet supported.
Bug: 62408420
Test: ./gradlew :room:room-compiler:test \
:room:integration-tests:testapp:cC \
:room:integration-tests:autovaluetestapp:cC
Change-Id: Idce0b5934e0aa864117fc95e7d19a7edc2c94f9f
M app-toolkit/settings.gradle
M buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
M room/common/src/main/java/androidx/room/ColumnInfo.java
M room/common/src/main/java/androidx/room/PrimaryKey.java
M room/compiler/build.gradle
M room/compiler/src/main/kotlin/androidx/room/RoomProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/checker/AutoValueTargetChecker.kt
M room/compiler/src/main/kotlin/androidx/room/ext/element_ext.kt
M room/compiler/src/main/kotlin/androidx/room/processor/EntityProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/PojoProcessor.kt
M room/compiler/src/main/kotlin/androidx/room/processor/ProcessorErrors.kt
M room/compiler/src/main/kotlin/androidx/room/processor/RawQueryMethodProcessor.kt
A room/compiler/src/main/kotlin/androidx/room/processor/autovalue/AutoValuePojoProcessorDelegate.kt
M room/compiler/src/main/kotlin/androidx/room/solver/TypeAdapterStore.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Constructor.kt
M room/compiler/src/main/kotlin/androidx/room/vo/Warning.kt
M room/compiler/src/main/kotlin/androidx/room/writer/FieldReadWriteWriter.kt
M room/compiler/src/test/kotlin/androidx/room/processor/EntityProcessorTest.kt
M room/compiler/src/test/kotlin/androidx/room/processor/PojoProcessorTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/autovalue/AutoValuePojoProcessorDelegateTest.kt
A room/compiler/src/test/kotlin/androidx/room/processor/checker/AutoValueTargetCheckerTest.kt
M room/compiler/src/test/kotlin/androidx/room/testing/test_util.kt
A room/integration-tests/autovaluetestapp/.gitignore
A room/integration-tests/autovaluetestapp/build.gradle
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/TestDatabase.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/ParcelableEntityDao.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/PersonDao.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/PetDao.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/ParcelableEntityDaoTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/PersonDaoTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/PetDaoTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/TestDatabaseTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/EmbeddedAutoValue.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/ParcelableEntity.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/Person.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/Pet.java
A room/integration-tests/autovaluetestapp/src/main/AndroidManifest.xml
M settings.gradle
ra...@google.com <ra...@google.com> #25
Branch: androidx-master-dev
commit b4e0fe5d54a89ce8ce9a852774892c498edd4508
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Jul 23 19:51:46 2018
Add support for @Embedded in AutoValue Pojos.
Bug: 62408420
Test: ./gradlew :room:integration-tests:autovaluetestapp:cC
Change-Id: I4aa02aae022e4971a8708c4aba4cf9f3e90f65a5
M room/common/src/main/java/androidx/room/Embedded.java
M room/compiler/src/main/kotlin/androidx/room/checker/AutoValueTargetChecker.kt
M room/compiler/src/test/kotlin/androidx/room/processor/checker/AutoValueTargetCheckerTest.kt
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/PersonDao.java
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/PetDao.java
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/PersonDaoTest.java
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/PetDaoTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/PersonAndCat.java
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/Pet.java
al...@gmail.com <al...@gmail.com> #26
Branch: androidx-master-dev
commit 0f55cbbe13e26294af67aca6bce0e13a960ae752
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Mon Jul 30 17:06:22 2018
Add support for @Relation in AutoValue Pojos.
Bug: 62408420
Test: ./gradlew :room:integration-tests:autovaluetestapp:cC
Change-Id: I7634ac388e328dca9c33f7ac422080b42b362ee0
M room/common/src/main/java/androidx/room/Relation.java
M room/compiler/src/main/kotlin/androidx/room/checker/AutoValueTargetChecker.kt
M room/compiler/src/test/kotlin/androidx/room/processor/checker/AutoValueTargetCheckerTest.kt
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/PersonDao.java
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/dao/PetDao.java
M room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/test/PersonDaoTest.java
A room/integration-tests/autovaluetestapp/src/androidTest/java/androidx/room/integration/autovaluetestapp/vo/PersonWithCats.java
jo...@gmail.com <jo...@gmail.com> #27
su...@google.com <su...@google.com> #28
In that case it's really limited.
Can you provide way to have static factory methods instead of constructors? Then we can use whatever code generator.
Like:
@RoomFactoryMethod
public static MyEntity create(int id, String name) {
return ImmutableMyEntity.of(id, name);
}
al...@gmail.com <al...@gmail.com> #29
Having an entity factory method seems reasonable too as a future improvement.
ra...@google.com <ra...@google.com> #30
[Deleted User] <[Deleted User]> #31
mi...@sesma.eu <mi...@sesma.eu> #32
Fatal Exception: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:2013)
at android.os.Parcel.readException(Parcel.java:1951)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:180)
Device Mi A1 with Android 8.1.0. WorkManager 1.0.0-alpha06
This is the code:
val workers = assets.map { assetModel ->
val data = Data.Builder()
.putString(ASSET_UUID, assetModel.uuid)
.putString(ASSET_URL, assetModel.url)
.putString(ASSET_VERSION, assetModel.version.toString())
.build()
OneTimeWorkRequest.Builder(AssetDownloadWorker::class.java)
.setInputData(data)
.build()
}
val continuation = workManager?.beginUniqueWork(
DOWNLOAD_WORK_NAME + mainUuid,
ExistingWorkPolicy.KEEP,
workers.toList())
su...@google.com <su...@google.com> #33
al...@gmail.com <al...@gmail.com> #34
[Deleted User] <[Deleted User]> #35
We don't know exactly how to reproduce this error but we see in crashlytics that two users are getting this issue lots of times. The date we have about this users and crashes:
User 1, 11 crashes: Android 7.1.1 Nubia NX591J
Fatal Exception: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:1692)
at android.os.Parcel.readException(Parcel.java:1637)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:158)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:42)
at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:126)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:95)
at androidx.work.impl.Schedulers.schedule(Schedulers.java:99)
at androidx.work.impl.utils.EnqueueRunnable.scheduleWorkInBackground(EnqueueRunnable.java:114)
at androidx.work.impl.utils.EnqueueRunnable.run(EnqueueRunnable.java:86)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
User 2, 17 crashes: Android 7.0 Asus X008D
Fatal Exception: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:1691)
at android.os.Parcel.readException(Parcel.java:1636)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:158)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:42)
at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:126)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:95)
at androidx.work.impl.Schedulers.schedule(Schedulers.java:99)
at androidx.work.impl.utils.EnqueueRunnable.scheduleWorkInBackground(EnqueueRunnable.java:114)
at androidx.work.impl.utils.EnqueueRunnable.run(EnqueueRunnable.java:86)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
ra...@google.com <ra...@google.com> #36
cr...@supercomputo.mx <cr...@supercomputo.mx> #37
This is not still happening on version :1.0.0-alpha09
te...@gmail.com <te...@gmail.com> #38
Fatal Exception: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:1967)
at android.os.Parcel.readException(Parcel.java:1905)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:180)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:44)
at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(SystemJobScheduler.java:148)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(SystemJobScheduler.java:117)
at androidx.work.impl.Schedulers.schedule(Schedulers.java:99)
at androidx.work.impl.utils.EnqueueRunnable.scheduleWorkInBackground(EnqueueRunnable.java:114)
at androidx.work.impl.utils.EnqueueRunnable.run(EnqueueRunnable.java:86)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
te...@gmail.com <te...@gmail.com> #39
class App : MultiDexApplication() {
override fun onCreate() {
super.onCreate()
Job.schedule()
}
}
class Job(ctx: Context, params: WorkerParameters) : Worker(ctx, params) {
override fun doWork(): Worker.Result {
Log.d("-------------------Job is done!--------------------")
return Result.SUCCESS
}
companion object {
private const val TAG = "my_job"
fun schedule() {
val workManager = WorkManager.getInstance()
val work = PeriodicWorkRequest.Builder(Job::class.java, 1, DAYS).addTag(TAG).build()
workManager.enqueueUniquePeriodicWork(TAG, KEEP, work)
}
}
}
mi...@sesma.eu <mi...@sesma.eu> #40
te...@gmail.com <te...@gmail.com> #41
so...@gmail.com <so...@gmail.com> #42
ad...@gmail.com <ad...@gmail.com> #43
I'm removing WorkManager from our project and getting back to JobScheduler.
I can't believe that Google is not able to fix a base/core issue in this library for 11 versions straight, it is totally unusable with this bug.
Is there a way we can raise this ticket to someone more competent that is able to solve this problem???
Such a shame Google...
ra...@google.com <ra...@google.com> #44
ad...@gmail.com <ad...@gmail.com> #45
On 50K users using the app (with alpha11 library), we see that around 0.1% (50) of them have these crashes. It only happens on Android version 7 and 8.
We had a bigger crash rate before upgrading to alpha11, but the bug is still happening.
The only traces I have are these from Fabric:
Android 7
Fatal Exception: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:1701)
at android.os.Parcel.readException(Parcel.java:1646)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:158)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:42)
at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(Unknown Source:148)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(Unknown Source:117)
at androidx.work.impl.Schedulers.schedule(Unknown Source:99)
at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(Unknown Source:550)
at androidx.work.impl.utils.ForceStopRunnable.run(Unknown Source:74)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Android 7
Fatal Exception: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:1691)
at android.os.Parcel.readException(Parcel.java:1636)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:158)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:42)
at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(Unknown Source:148)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(Unknown Source:117)
at androidx.work.impl.Schedulers.schedule(Unknown Source:99)
at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(Unknown Source:550)
at androidx.work.impl.utils.ForceStopRunnable.run(Unknown Source:74)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:761)
Android 8
Fatal Exception: java.lang.IllegalStateException: Apps may not schedule more than 100 distinct jobs
at android.os.Parcel.readException(Parcel.java:1975)
at android.os.Parcel.readException(Parcel.java:1913)
at android.app.job.IJobScheduler$Stub$Proxy.schedule(IJobScheduler.java:180)
at android.app.JobSchedulerImpl.schedule(JobSchedulerImpl.java:44)
at androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal(Unknown Source:148)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(Unknown Source:117)
at androidx.work.impl.Schedulers.schedule(Unknown Source:99)
at androidx.work.impl.WorkManagerImpl.rescheduleEligibleWork(Unknown Source:550)
at androidx.work.impl.utils.ForceStopRunnable.run(Unknown Source:74)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
It is happening on a wide range of devices (some of them):
Samsung Galaxy S7 (herolte),
Samsung Galaxy S7 (heroltebmc), Android 7.0
Samsung Galaxy Note5 (noblelte), Android 7.0
Samsung Galaxy S6 (zeroflte), Android 7.0
Samsung Galaxy S7 edge (hero2lte), Android 8.0
Motorola Moto G (5th Gen) (cedric), Android 8.1
Motorola Moto G(4) Plus (athene_f), Android 7.0
LGE V20 (elsa), Android 8.0
LGE LG K20 (lv517n), Android 7.0
dream2qltesq, Android 7.0
Huawei 荣耀畅玩 6X (HWBLN-H), Android 7.0
Sony Xperia Z5 (SO-01H), Android 7.0
Sony Xperia XZ Premium (SO-04J), Android 8.0
ra...@google.com <ra...@google.com> #46
You might want to push an update on the next version of your app, where you can cancelAllWork(), and reschedule all the Workers you need.
ad...@gmail.com <ad...@gmail.com> #47
ra...@google.com <ra...@google.com> #48
That way you are guaranteed to start from a clean slate, and then you can reschedule your work. Also, are you using a custom configuration when instantiating WorkManager ?
ad...@gmail.com <ad...@gmail.com> #49
Here is the code:
WorkManager.getInstance().cancelAllWorkByTag(NotificationWorker.TAG);
PeriodicWorkRequest.Builder notificationsWorkBuilder = new PeriodicWorkRequest.Builder(NotificationWorker.class, NOTIFICATIONS_PERIOD, TimeUnit.MILLISECONDS);
notificationsWorkBuilder.addTag(NotificationWorker.TAG);
PeriodicWorkRequest notificationWork = notificationsWorkBuilder.build();
WorkManager.getInstance().enqueueUniquePeriodicWork(NotificationWorker.TAG, ExistingPeriodicWorkPolicy.REPLACE, notificationWork);
ra...@google.com <ra...@google.com> #50
Just to ensure that you are starting from a clean slate I would also try and call
ad...@gmail.com <ad...@gmail.com> #51
ad...@gmail.com <ad...@gmail.com> #52
We recently launched an update that includes "androidx.work:work-runtime:2.0.1", and we used it to schedule all our tasks now, in a satisfactory way. I just want to inform, (as you can see in the images attached below), that this problem keeps happening sporadically.
Keep in mind that the number of users affected in our case is small, since the app has several million active users, but it also starts to be worrisome, since the number of errors generated by each user is high.
The errors mainly occur in Android 6 and 7, and sometimes in 8, but especially in Android 7.
I do not expose implementation details, since the documentation of this SDK has been thoroughly studied, and in case there was a bad implementation, the number of errors would be infinitely greater.
Greetings.
[Deleted User] <[Deleted User]> #53
ra...@google.com <ra...@google.com> #54
This bug report talks about this crash in the 1.x alpha era. So I just want to disambiguate the problem.
nf...@gmail.com <nf...@gmail.com> #55
Total crash count is raised drasticly, here we have stats for 40000 devices with 1.0.1 workmanager version: This issue has 46707 crashes affecting 347 users
su...@google.com <su...@google.com> #56
na...@mercadolibre.com <na...@mercadolibre.com> #57
We're using WorkManager#enqueue(OneTimeWorkRequest), instead of WorkManager#beginUniqueWork(OneTimeWorkRequest).
Upgrading to v2.x as you suggest forces us to migrate to Android X too. On v2.x I didn't see anything related in the changelog to justify the migration to Android X.. how can I be sure that migrating both Android X and work-runtime v2.x is gonna fix our issues?
Currently it's happening only in Android 7 (API 24), mainly in Motorola phones (70% Moto C Plus:
Thank you, regards!
ra...@google.com <ra...@google.com> #58
da...@gmail.com <da...@gmail.com> #59
ju...@gmail.com <ju...@gmail.com> #60
ra...@gmail.com <ra...@gmail.com> #61
Fatal Exception: java.lang.IllegalStateException
JobScheduler 100 job limit exceeded. We count 0 WorkManager jobs in JobScheduler; we have 1 tracked jobs in our DB; our Configuration limit is 20.
androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal (SystemJobScheduler.java:204)
androidx.work.impl.background.systemjob.SystemJobScheduler.schedule (SystemJobScheduler.java:132)
androidx.work.impl.Schedulers.schedule (Schedulers.java:108)
androidx.work.impl.utils.ForceStopRunnable.forceStopRunnable (ForceStopRunnable.java:176)
androidx.work.impl.utils.ForceStopRunnable.run (ForceStopRunnable.java:102)
androidx.work.impl.utils.SerialExecutor$Task.run (SerialExecutor.java:91)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
java.lang.Thread.run (Thread.java:764)
Caused by java.lang.IllegalStateException
Apps may not schedule more than 100 distinct jobs
android.os.Parcel.createException (Parcel.java:1958)
android.os.Parcel.readException (Parcel.java:1918)
android.os.Parcel.readException (Parcel.java:1868)
android.app.job.IJobScheduler$Stub$Proxy.schedule (IJobScheduler.java:184)
android.app.JobSchedulerImpl.schedule (JobSchedulerImpl.java:44)
androidx.work.impl.background.systemjob.SystemJobScheduler.scheduleInternal (SystemJobScheduler.java:186)
androidx.work.impl.background.systemjob.SystemJobScheduler.schedule (SystemJobScheduler.java:132)
androidx.work.impl.Schedulers.schedule (Schedulers.java:108)
androidx.work.impl.utils.ForceStopRunnable.forceStopRunnable (ForceStopRunnable.java:176)
androidx.work.impl.utils.ForceStopRunnable.run (ForceStopRunnable.java:102)
androidx.work.impl.utils.SerialExecutor$Task.run (SerialExecutor.java:91)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1167)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:641)
java.lang.Thread.run (Thread.java:764)
ra...@google.com <ra...@google.com> #62
JobScheduler 100 job limit exceeded. We count 0 WorkManager jobs in JobScheduler; we have 1 tracked jobs in our DB; our Configuration limit is 20.
You have other libraries in your app scheduling jobs. This is not WorkManager's fault.
kr...@gmail.com <kr...@gmail.com> #63
In my Samsung Galaxy M30S which recently crashed when checking the rescue log found the same code which is mentioned under more than 100 distinct jobs..... Unfortunately all Samsung service centres asked me to erase 64 GB data and reset phone to resolve. Is there no other solution for the same ?
ap...@gmail.com <ap...@gmail.com> #64
implementation "androidx.work:work-runtime-ktx:2.7.1"
Fatal Exception: java.lang.IllegalStateException JobScheduler 100 job limit exceeded. We count 0 WorkManager jobs in JobScheduler; we have 1 tracked jobs in our DB; our Configuration limit is 20.
Description
Version used: 1.0.0-alpha04
Devices/Android versions reproduced on: AVD Pixel 2 27
Our setup:
`
<provider
android:name="androidx.work.impl.WorkManagerInitializer"
android:enabled="false"
tools:ignore="ExportedContentProvider" />
`
`
val wmConfig = Configuration
.Builder()
.setMaxSchedulerLimit(95)
.build()
WorkManager.initialize(ctx, wmConfig)
`
It's not always crashes.
We are scheduling multiple jobs chains. Each chain is a tree where we utilize input/outputs, where the last job depends on all the leafs of the tree. We build this tree only once, no recheduling inside Workers.