Status Update
Comments
hu...@gmail.com <hu...@gmail.com> #2
The issue is reproducible with core-ktx 1.2.0 and 1.3.0-rc01.
ra...@google.com <ra...@google.com> #3
The Typeface.weight is not a weight of the underlying font file. It is a display style. On older APIs, the display style is adjusted if the Typeface is created from single font. However, after moving to CustomFallbackBuilder, that adjustment is removed since it can crate Typeface from multiple style font files.
Looks like it is good to set display style by ResourcesCompat.getFont for backward compatibility.
hu...@gmail.com <hu...@gmail.com> #4
Hi Nona,
Can you please schedule a release after you merge the fix?
hu...@gmail.com <hu...@gmail.com> #5
Branch: androidx-master-dev
commit 3d6aa2e9b3243dcc4de1f54bd8d40339bd69cb05
Author: Seigo Nonaka <nona@google.com>
Date: Wed May 27 17:38:05 2020
Adjust the Typeface display style with the style of given font
This behavir is implicitly done by Typeface.Builder and
Typeface.createXXX function but not to be done by
Typeface.CustomFallbackBuilder since it is designed to be working
with multiple font files which has different style.
Looks like the style argument is ignored on older API implementation.
Bug: 156853883
Bug: 152023266
Test: ResourcesCompatTest#testGetFont_adjustDisplayStyle passes on 29
Test: ./gradlew core:core:connectedAndroidTest on API 29, 28, 23
Change-Id: I3a377c339a7aed50973cf11df86ddf0069f4ec25
A core/core/src/androidTest/assets/fonts/thin_italic.ttf
A core/core/src/androidTest/assets/fonts/thin_italic.ttx
M core/core/src/androidTest/java/androidx/core/content/res/ResourcesCompatTest.java
A core/core/src/androidTest/res/font/thin_italic.ttf
M core/core/src/main/java/androidx/core/graphics/TypefaceCompatApi29Impl.java
ra...@google.com <ra...@google.com> #7
Any way I can tell what version this will land in?
ra...@google.com <ra...@google.com>
ra...@google.com <ra...@google.com> #9
Great—works as expected, thanks!
su...@google.com <su...@google.com> #10
hu...@gmail.com <hu...@gmail.com> #11
hu...@gmail.com <hu...@gmail.com> #12
For some reason it rarely crashes on AVD Emulator(Api 27), but 100% crashes on Genymotion Api 26 and my Xiaomi Redmi 7.1.2
You can try both Activities.
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
hu...@gmail.com <hu...@gmail.com> #17
hu...@gmail.com <hu...@gmail.com> #18
ra...@google.com <ra...@google.com> #19
I am marking this as not reproducible.
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
Just for my understanding, should we be able to enqueue more than ~100 WorkRequest ?
su...@google.com <su...@google.com> #23
ra...@google.com <ra...@google.com> #25
al...@gmail.com <al...@gmail.com> #26
jo...@gmail.com <jo...@gmail.com> #27
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(DT:126)
at androidx.work.impl.background.systemjob.SystemJobScheduler.schedule(DT:95)
at androidx.work.impl.Schedulers.schedule(DT:99)
at androidx.work.impl.WorkerWrapper$1.run(DT:263)
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)
su...@google.com <su...@google.com> #28
Finally, if you can turn on verbose logging through the Configuration options, please send us the logcat using that.
al...@gmail.com <al...@gmail.com> #29
Here's the crash log
08-31 17:31:19.892 9930-9985/com.example.agupta15.tryouts E/AndroidRuntime: FATAL EXCEPTION: pool-2-thread-1
Process: com.example.agupta15.tryouts, PID: 9930
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)
08-31 17:31:19.893 9930-9930/com.example.agupta15.tryouts D/status worker: id f5c workstatus state = ENQUEUED
08-31 17:31:19.893 9930-9930/com.example.agupta15.tryouts D/WorkManagerUtils: Schedule for Worker Class: Class Job Id: 100100
08-31 17:31:20.016 9930-9993/com.example.agupta15.tryouts E/WorkerWrapper: Didn't find WorkSpec for id 7f9fdb71-1c34-41e0-b012-97be46ecba85
08-31 17:31:20.020 9930-10011/com.example.agupta15.tryouts E/WorkerWrapper: Didn't find WorkSpec for id 6fdcb2ea-1f3c-4238-b175-15c4c4d80ec6
Please ignore the D/ logs (they are my own for debugging)
ra...@google.com <ra...@google.com> #30
Also are you changing the default WorkManager Configuration ? Can you please send us a code snippet ?
[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.