Fixed
Status Update
Comments
ma...@google.com <ma...@google.com>
ka...@mercari.com <ka...@mercari.com> #2
Can you please send us a test app which can reproduce this ?
an...@google.com <an...@google.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 5975b62cd1f3f170bb82e9761efca40e5e5bfb16
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Wed Jul 24 12:24:17 2019
TaskExecutor's background executor is now SerialExecutor.
* This gives us visibility into the number of pending tasks which will
be important in the next CL.
There is a race condition between the SerialExecutor draining its queue
of pending tasks and SystemAlarmDispatcher's onAllCommandsCompleted() callback.
This is because SystemAlarmDispatcher thinks there are no more things to be
done even though there are pending runnables in the SerialExecutor.
This CL makes this information available. In the next CL, CommandHandler
will check for pending runnables in the SerialExecutor queue.
( b/138238197 )
* Fixed TestWorkManagerImpl to use Configuration#getTaskExecutor().
* Updated unit tests.
Test: Updated unit tests.
Change-Id: I5f32f1e1ef2563d4598934aed3b61d62a6d6167c
M work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt
M work/workmanager-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt
M work/workmanager-rxjava2/src/test/java/androidx/work/RxWorkerTest.kt
M work/workmanager-testing/src/androidTest/java/androidx/work/testing/WorkManagerInitHelperTest.java
M work/workmanager-testing/src/main/java/androidx/work/testing/InstantWorkTaskExecutor.java
M work/workmanager-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.java
M work/workmanager-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java
M work/workmanager/src/androidTest/java/androidx/work/impl/utils/taskexecutor/InstantWorkTaskExecutor.java
M work/workmanager/src/main/java/androidx/work/impl/utils/SerialExecutor.java
M work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/TaskExecutor.java
M work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor.java
https://android-review.googlesource.com/1090749
https://goto.google.com/android-sha1/5975b62cd1f3f170bb82e9761efca40e5e5bfb16
Branch: androidx-master-dev
commit 5975b62cd1f3f170bb82e9761efca40e5e5bfb16
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Wed Jul 24 12:24:17 2019
TaskExecutor's background executor is now SerialExecutor.
* This gives us visibility into the number of pending tasks which will
be important in the next CL.
There is a race condition between the SerialExecutor draining its queue
of pending tasks and SystemAlarmDispatcher's onAllCommandsCompleted() callback.
This is because SystemAlarmDispatcher thinks there are no more things to be
done even though there are pending runnables in the SerialExecutor.
This CL makes this information available. In the next CL, CommandHandler
will check for pending runnables in the SerialExecutor queue.
(
* Fixed TestWorkManagerImpl to use Configuration#getTaskExecutor().
* Updated unit tests.
Test: Updated unit tests.
Change-Id: I5f32f1e1ef2563d4598934aed3b61d62a6d6167c
M work/workmanager-gcm/src/androidTest/java/androidx/work/impl/background/gcm/WorkManagerGcmDispatcherTest.kt
M work/workmanager-ktx/src/androidTest/java/androidx/work/CoroutineWorkerTest.kt
M work/workmanager-rxjava2/src/test/java/androidx/work/RxWorkerTest.kt
M work/workmanager-testing/src/androidTest/java/androidx/work/testing/WorkManagerInitHelperTest.java
M work/workmanager-testing/src/main/java/androidx/work/testing/InstantWorkTaskExecutor.java
M work/workmanager-testing/src/main/java/androidx/work/testing/TestWorkManagerImpl.java
M work/workmanager-testing/src/main/java/androidx/work/testing/WorkManagerTestInitHelper.java
M work/workmanager/src/androidTest/java/androidx/work/impl/utils/taskexecutor/InstantWorkTaskExecutor.java
M work/workmanager/src/main/java/androidx/work/impl/utils/SerialExecutor.java
M work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/TaskExecutor.java
M work/workmanager/src/main/java/androidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor.java
ka...@mercari.com <ka...@mercari.com> #4
There is a 2nd change that fixes the problem.
ap...@google.com <ap...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 7db27318ea09ae3857a7baebe8dd4e6fa9d16fdc
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Wed Jul 24 12:50:34 2019
Ensure SerialExecutor has no more pending tasks.
* We need to ensure this is the case because we might shutdown
SystemAlarmService without actually completing all the tasks.
Test: Existing unit tests pass. Ran integration tests.
Fixes: b/138238197
Change-Id: I72fe2ddb1607995721eae320ce41accad93fee8f
M work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
M work/workmanager/src/main/java/androidx/work/impl/utils/SerialExecutor.java
https://android-review.googlesource.com/1090758
https://goto.google.com/android-sha1/7db27318ea09ae3857a7baebe8dd4e6fa9d16fdc
Branch: androidx-master-dev
commit 7db27318ea09ae3857a7baebe8dd4e6fa9d16fdc
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Wed Jul 24 12:50:34 2019
Ensure SerialExecutor has no more pending tasks.
* We need to ensure this is the case because we might shutdown
SystemAlarmService without actually completing all the tasks.
Test: Existing unit tests pass. Ran integration tests.
Fixes:
Change-Id: I72fe2ddb1607995721eae320ce41accad93fee8f
M work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
M work/workmanager/src/main/java/androidx/work/impl/utils/SerialExecutor.java
ap...@google.com <ap...@google.com> #6
Awesomme! Thanks for the fix
an...@google.com <an...@google.com>
ka...@mercari.com <ka...@mercari.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
st...@google.com <st...@google.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)
na...@google.com <na...@google.com> #9
Can you please give us a sample app that reproduces this problem?
al...@mercari.com <al...@mercari.com> #10
Also, are you sure the app in question was using the recent version of WM ?
an...@google.com <an...@google.com> #11
Hey. Please check that you can reproduce the same issue with the latest 1.4 release and if yes please file a new bug. Thanks
Description
Jetpack Compose version: 1.3.0 & 1.4.0-alpha02
Android Studio Build: IntelliJ IDEA 2022.2.3
Kotlin version: 1.7.10
Steps to Reproduce or Code Sample to Reproduce:
We're seeing an issue where a Lazy layout with a BoxWithConstraints in the
item
will add new items to the saved bundle every time the user scrolls. The entries appear to be AbsSavedState.EMPTY_STATE, but there are so many of them that the bundle fills up quickly and can cause a "TransactionTooLargeException".I've attached a sample project demonstrating the issue. The issue only appears on Android 9, and the sample project does not exhibit the issue in either Android 8.1 or Android 10. Nor does the issue happen when swapping BoxWithConstraints with Box. Also it appears to have been introduced some point after Compose 1.2.0, as the sample also doesn't experience the issue on Android 9 when using Compose 1.2.0.