Fixed
Status Update
Comments
ra...@google.com <ra...@google.com> #2
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 19b15188d2c730d65e6a1e24e5df26bcfd1bffa7
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Tue Apr 30 17:27:38 2019
Add a delegating WorkerFactory which can delegate to other WorkerFactories.
Test: Added unit tests.
Fixes: b/131435993
Change-Id: Id55dfca1ea4461b2bf2d7da2356c6cce9af22507
M work/workmanager/api/2.1.0-alpha01.txt
M work/workmanager/api/current.txt
M work/workmanager/build.gradle
A work/workmanager/src/androidTest/java/androidx/work/DelegatingWorkerFactoryTest.kt
A work/workmanager/src/main/java/androidx/work/DelegatingWorkerFactory.java
M work/workmanager/src/main/java/androidx/work/WorkerFactory.java
https://android-review.googlesource.com/954186
https://goto.google.com/android-sha1/19b15188d2c730d65e6a1e24e5df26bcfd1bffa7
Branch: androidx-master-dev
commit 19b15188d2c730d65e6a1e24e5df26bcfd1bffa7
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Tue Apr 30 17:27:38 2019
Add a delegating WorkerFactory which can delegate to other WorkerFactories.
Test: Added unit tests.
Fixes:
Change-Id: Id55dfca1ea4461b2bf2d7da2356c6cce9af22507
M work/workmanager/api/2.1.0-alpha01.txt
M work/workmanager/api/current.txt
M work/workmanager/build.gradle
A work/workmanager/src/androidTest/java/androidx/work/DelegatingWorkerFactoryTest.kt
A work/workmanager/src/main/java/androidx/work/DelegatingWorkerFactory.java
M work/workmanager/src/main/java/androidx/work/WorkerFactory.java
ap...@google.com <ap...@google.com> #3
So if I understand this correctly, this enables us to add more worker factory at runtime?
ra...@google.com <ra...@google.com> #4
This enables the use-case where a library that uses WorkManager uses a different WorkerFactory. So an application could add the library provided WorkerFactory to the list of delegates.
ap...@google.com <ap...@google.com> #5
You should add your libraries at startup, not at some point after your app and WorkManager have been initialized.
ro...@gmail.com <ro...@gmail.com> #6
Awesomme! Thanks for the fix
an...@google.com <an...@google.com> #7
The following changes were cherrypicked through Coastguard (https://android-build.googleplex.com/coastguard/ )
Release Track: (https://android-build.googleplex.com/coastguard/dashboard/6206758647365632/#/cherrypickHistory/all )
Created: 2019-07-26 23:31:17.300138+00:00
Changes: aosp/1092373, aosp/1092374
Release Track: (
Created: 2019-07-26 23:31:17.300138+00:00
Changes: aosp/1092373, aosp/1092374
ro...@gmail.com <ro...@gmail.com> #8
Hi,
I used 2.2.0-RC1 and the issue still persists but not as frequent as before.
08-14 11:38:59.141 975-987/ A/PowerManager: WakeLock finalized while still held: WorkManager: bd0a17b6-e87a-4c44-bb7f-6ae195975b36 (2)
08-14 11:39:02.588 975-1102/com.yantranet.signware.agent.staging E/WM-SystemAlarmDispatche: Unexpected error in onHandleIntent
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@3b835a4f rejected from java.util.concurrent.ScheduledThreadPoolExecutor@48bb5dc[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793)
at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:298)
at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:503)
at java.util.concurrent.Executors$DelegatedScheduledExecutorService.schedule(Executors.java:644)
at androidx.work.impl.background.systemalarm.WorkTimer.startTimer(WorkTimer.java:82)
at androidx.work.impl.background.systemalarm.DelayMetCommandHandler.onAllConstraintsMet(DelayMetCommandHandler.java:135)
at androidx.work.impl.background.systemalarm.DelayMetCommandHandler.handleProcessWork(DelayMetCommandHandler.java:211)
at androidx.work.impl.background.systemalarm.CommandHandler.handleDelayMet(CommandHandler.java:272)
at androidx.work.impl.background.systemalarm.CommandHandler.onHandleIntent(CommandHandler.java:171)
at androidx.work.impl.background.systemalarm.SystemAlarmDispatcher$1.run(SystemAlarmDispatcher.java:276)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
08-14 11:39:44.850 975-987/ A/PowerManager: WakeLock finalized while still held: WorkManager: 348bf17e-7aa4-48df-b88e-a2e7e3b5483d (2)
I used 2.2.0-RC1 and the issue still persists but not as frequent as before.
08-14 11:38:59.141 975-987/ A/PowerManager: WakeLock finalized while still held: WorkManager: bd0a17b6-e87a-4c44-bb7f-6ae195975b36 (2)
08-14 11:39:02.588 975-1102/com.yantranet.signware.agent.staging E/WM-SystemAlarmDispatche: Unexpected error in onHandleIntent
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@3b835a4f rejected from java.util.concurrent.ScheduledThreadPoolExecutor@48bb5dc[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793)
at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:298)
at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:503)
at java.util.concurrent.Executors$DelegatedScheduledExecutorService.schedule(Executors.java:644)
at androidx.work.impl.background.systemalarm.WorkTimer.startTimer(WorkTimer.java:82)
at androidx.work.impl.background.systemalarm.DelayMetCommandHandler.onAllConstraintsMet(DelayMetCommandHandler.java:135)
at androidx.work.impl.background.systemalarm.DelayMetCommandHandler.handleProcessWork(DelayMetCommandHandler.java:211)
at androidx.work.impl.background.systemalarm.CommandHandler.handleDelayMet(CommandHandler.java:272)
at androidx.work.impl.background.systemalarm.CommandHandler.onHandleIntent(CommandHandler.java:171)
at androidx.work.impl.background.systemalarm.SystemAlarmDispatcher$1.run(SystemAlarmDispatcher.java:276)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
08-14 11:39:44.850 975-987/ A/PowerManager: WakeLock finalized while still held: WorkManager: 348bf17e-7aa4-48df-b88e-a2e7e3b5483d (2)
su...@google.com <su...@google.com> #9
Can you please give us a sample app that reproduces this problem?
ra...@google.com <ra...@google.com> #10
Also, are you sure the app in question was using the recent version of WM ?
Description
Version used:2.1.0
Devices/Android versions reproduced on:MINIX/Android 5.1.1
If this is a bug in the library, we would appreciate if you could attach:
07-23 15:02:22.508 1042-1127/E/WM-SystemAlarmDispatche: Unexpected error in onHandleIntent
java.util.concurrent.RejectedExecutionException: Task java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask@2713e108 rejected from java.util.concurrent.ScheduledThreadPoolExecutor@63770a1[Terminated, pool size = 0, active threads = 0, queued tasks = 0, completed tasks = 0]
at java.util.concurrent.ThreadPoolExecutor$AbortPolicy.rejectedExecution(ThreadPoolExecutor.java:2011)
at java.util.concurrent.ThreadPoolExecutor.reject(ThreadPoolExecutor.java:793)
at java.util.concurrent.ScheduledThreadPoolExecutor.delayedExecute(ScheduledThreadPoolExecutor.java:298)
at java.util.concurrent.ScheduledThreadPoolExecutor.schedule(ScheduledThreadPoolExecutor.java:503)
at java.util.concurrent.Executors$DelegatedScheduledExecutorService.schedule(Executors.java:644)
at androidx.work.impl.background.systemalarm.WorkTimer.startTimer(WorkTimer.java:82)
at androidx.work.impl.background.systemalarm.DelayMetCommandHandler.onAllConstraintsMet(DelayMetCommandHandler.java:135)
at androidx.work.impl.background.systemalarm.DelayMetCommandHandler.handleProcessWork(DelayMetCommandHandler.java:211)
at androidx.work.impl.background.systemalarm.CommandHandler.handleDelayMet(CommandHandler.java:272)
at androidx.work.impl.background.systemalarm.CommandHandler.onHandleIntent(CommandHandler.java:171)
at androidx.work.impl.background.systemalarm.SystemAlarmDispatcher$1.run(SystemAlarmDispatcher.java:272)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:75)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
07-23 15:02:22.963 1042-1055/com.yantranet.signware.agent.staging A/PowerManager: WakeLock finalized while still held: WorkManager: 72a8dc67-9b97-430d-9fc9-876f7e7c836c (2)
I need to run work request on-demand for a list of workers. The on-demand request can come in multiple times. So I basically loop the requests and create OneTimeWorkRequest for each Worker. I end up with the Exectuor RejectionException as above.