Fixed
Status Update
Comments
ra...@google.com <ra...@google.com>
ra...@google.com <ra...@google.com> #2
Hi. Thanks for reporting this. Fixed in alpha-04
[Deleted User] <[Deleted User]> #3
Project: platform/frameworks/support
Branch: androidx-main
commit e782987543a9f8ccd485e970ddc74564b24378db
Author: Vighnesh Raut <vighnesh.raut13@gmail.com>
Date: Mon Jan 02 15:27:40 2023
fix: tab row crashes when only 1 tab is added
Bug: b/264018028
Test: Added unit test
Change-Id: I6381dbac304fc1d69d3708c6655f8b595668e93f
M tv/tv-material/src/androidTest/java/androidx/tv/material/TabRowTest.kt
M tv/tv-material/src/main/java/androidx/tv/material/TabRow.kt
https://android-review.googlesource.com/2373449
Branch: androidx-main
commit e782987543a9f8ccd485e970ddc74564b24378db
Author: Vighnesh Raut <vighnesh.raut13@gmail.com>
Date: Mon Jan 02 15:27:40 2023
fix: tab row crashes when only 1 tab is added
Bug:
Test: Added unit test
Change-Id: I6381dbac304fc1d69d3708c6655f8b595668e93f
M tv/tv-material/src/androidTest/java/androidx/tv/material/TabRowTest.kt
M tv/tv-material/src/main/java/androidx/tv/material/TabRow.kt
ra...@google.com <ra...@google.com> #4
deleted
ra...@google.com <ra...@google.com> #5
The following release(s) address this bug.It is possible this bug has only been partially addressed:
androidx.tv:tv-material:1.0.0-alpha04
[Deleted User] <[Deleted User]> #6
Unfortunately, we're not using WorkerFactory
at all. Here's what our current code looks like:
private const val UNIQUE_WORK_NAME = "some_string"
internal class SomeClass(private val application: Application) {
private val constraints = Constraints.Builder()
.setRequiresBatteryNotLow(true)
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
private val workRequest = OneTimeWorkRequestBuilder<SomeWorker>()
.addTag(UNIQUE_WORK_NAME)
.setConstraints(constraints)
.build()
override suspend fun submitUploadRequest(force: Boolean) {
WorkManager.getInstance(application).enqueueUniqueWork(
UNIQUE_WORK_NAME,
if (force) ExistingWorkPolicy.REPLACE else ExistingWorkPolicy.KEEP,
workRequest
)
}
}
internal class SomeWorker(
appContext: Context,
params: WorkerParameters
) : CoroutineWorker(appContext, params) {
override suspend fun doWork(): Result = TODO("Omitted")
}
[Deleted User] <[Deleted User]> #7
Two more data points based on reports:
- We're only seeing this crash on Android 7.x
- Most common devices: Huawei Mate 10 lite, Huawei P9 lite, Samsung Galaxy S6
Still trying to repro - no luck so far with API 24 emulator.
ra...@google.com <ra...@google.com> #8
We're only seeing this crash on Android 7.x
This makes sense. Because ConstraintTrackingWorker
is only used in API 23-25.
ap...@google.com <ap...@google.com> #9
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 3d54e41768eb0bdfcad5e574cf6837cdd6520035
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Wed Nov 11 11:29:55 2020
Improve `ConstraintTrackingWorker.onStopped()`.
* We only stop a constraint tracking worker it was not already stopped.
Fixes: b/172946965
Test: Added unit tests and integration tests. All existing tests pass.
Change-Id: Ic71b308d30024b98f5eb9cb23691583794254379
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
M work/integration-tests/testapp/src/main/res/layout/activity_main.xml
M work/integration-tests/testapp/src/main/res/values/strings.xml
M work/workmanager/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
M work/workmanager/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.java
https://android-review.googlesource.com/1496844
Branch: androidx-master-dev
commit 3d54e41768eb0bdfcad5e574cf6837cdd6520035
Author: Rahul Ravikumar <rahulrav@google.com>
Date: Wed Nov 11 11:29:55 2020
Improve `ConstraintTrackingWorker.onStopped()`.
* We only stop a constraint tracking worker it was not already stopped.
Fixes:
Test: Added unit tests and integration tests. All existing tests pass.
Change-Id: Ic71b308d30024b98f5eb9cb23691583794254379
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
M work/integration-tests/testapp/src/main/res/layout/activity_main.xml
M work/integration-tests/testapp/src/main/res/values/strings.xml
M work/workmanager/src/androidTest/java/androidx/work/impl/workers/ConstraintTrackingWorkerTest.java
M work/workmanager/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.java
tb...@gmail.com <tb...@gmail.com> #10
I am also seeing something similar reported for a Huawei P8 Lite on Android 7.0
Fatal Exception: java.lang.StackOverflowError: stack size 1037KB
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.workers.ConstraintTrackingWorker.isRunInForeground(ConstraintTrackingWorker.java:187)
at androidx.work.impl.WorkerWrapper.resolve(WorkerWrapper.java:447)
at androidx.work.impl.WorkerWrapper.tryCheckForInterruptionAndResolve(WorkerWrapper.java:419)
at androidx.work.impl.WorkerWrapper.interrupt(WorkerWrapper.java:375)
at androidx.work.impl.Processor.interrupt(Processor.java:331)
at androidx.work.impl.Processor.stopWork(Processor.java:188)
at androidx.work.impl.utils.StopWorkRunnable.run(StopWorkRunnable.java:73)
at androidx.work.impl.utils.SerialExecutor$Task.run(SerialExecutor.java:91)
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:776)
Is this related at all? Or is it a separate issue?
Description
This crash is happening in our production app. I haven't been able to reproduce it locally, but looking at WorkManager's source, the cause seems pretty straightforward.
Here's the source for
ListenableWorker.stop
for version 2.5.0-beta01:And here's the source for
ConstraintTrackingWorker.onStopped
for version 2.5.0-beta01:stop
callsonStopped
which callsstop
and so on. My assumption is that one of these two methods should check if the worker has already been stopped before calling each other again.