Fixed
Status Update
Comments
yb...@google.com <yb...@google.com> #2
This is definitely on our radar and there are plans to support it coming soon. We'll keep you updated on this bug.
an...@gmail.com <an...@gmail.com> #3
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 65e1ddf3b22249241c496890510071648bdff904
Author: Sumir Kataria <sumir@google.com>
Date: Mon Apr 01 16:33:01 2019
On-demand initialization for WorkManager.
This CL introduces WorkManager#getInstance(Context) as the preferred
method and deprecates the argument-less version. This method performs
on-demand initialization of WorkManager if it hasn't been initialized
previously by looking to see if the application Context implements
Configuration.Provider and querying it for the Configuration.
The exact order of initialization checks are now as follows:
1. Through WorkManagerInitializer if it's enabled.
2. Otherwise, through a WorkManager#initialize in Application#onCreate
or ContentProvider#onCreate if specified by the developer.
3. Otherwise, through WorkManager#getInstance(Context) if the
application Context implements Configuration.Provider. Using
WorkManager#getInstance() at this point results in an exception as
it does not contain the necessary information to initialize.
4. Otherwise, throws an IllegalStateException.
This change allows WorkManager to be setup in a manner where you can
only allow it to be initialized when it is needed. This is good for
apps that care about the critical path initialization needed by
WorkManager; in addition, all of WorkManager's own BroadcastReceivers
and Services are set up to try to auto-initialize if needed. Note
that this initialization can still happen on the main thread.
Bug: 127497100
Test: Ran integration tests with integration app doing on-demand init.
Change-Id: I30930d6445c0e9c5f08eaaab554963aaac99b3c9
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RecursiveWorker.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryActivity.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/TestApplication.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingActivity.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/AnalyzeSherlockHolmesActivity.java
M work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmService.java
M work/workmanager-testing/api/2.1.0-alpha01.txt
M work/workmanager-testing/api/current.txt
M work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestSchedulerTest.java
M work/workmanager-testing/src/androidTest/java/androidx/work/testing/WorkManagerInitHelperTest.java
M work/workmanager-testing/src/main/java/androidx/work/testing/TestScheduler.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-testing/src/main/java/androidx/work/testing/package-info.java
M work/workmanager-testing/src/test/java/androidx/work/testing/RobolectricSmokeTest.java
M work/workmanager/api/2.1.0-alpha01.txt
M work/workmanager/api/current.txt
M work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java
M work/workmanager/src/main/java/androidx/work/Configuration.java
M work/workmanager/src/main/java/androidx/work/WorkManager.java
M work/workmanager/src/main/java/androidx/work/impl/WorkManagerImpl.java
M work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/RescheduleReceiver.java
M work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
M work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
M work/workmanager/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.java
https://android-review.googlesource.com/937085
https://goto.google.com/android-sha1/65e1ddf3b22249241c496890510071648bdff904
Branch: androidx-master-dev
commit 65e1ddf3b22249241c496890510071648bdff904
Author: Sumir Kataria <sumir@google.com>
Date: Mon Apr 01 16:33:01 2019
On-demand initialization for WorkManager.
This CL introduces WorkManager#getInstance(Context) as the preferred
method and deprecates the argument-less version. This method performs
on-demand initialization of WorkManager if it hasn't been initialized
previously by looking to see if the application Context implements
Configuration.Provider and querying it for the Configuration.
The exact order of initialization checks are now as follows:
1. Through WorkManagerInitializer if it's enabled.
2. Otherwise, through a WorkManager#initialize in Application#onCreate
or ContentProvider#onCreate if specified by the developer.
3. Otherwise, through WorkManager#getInstance(Context) if the
application Context implements Configuration.Provider. Using
WorkManager#getInstance() at this point results in an exception as
it does not contain the necessary information to initialize.
4. Otherwise, throws an IllegalStateException.
This change allows WorkManager to be setup in a manner where you can
only allow it to be initialized when it is needed. This is good for
apps that care about the critical path initialization needed by
WorkManager; in addition, all of WorkManager's own BroadcastReceivers
and Services are set up to try to auto-initialize if needed. Note
that this initialization can still happen on the main thread.
Bug: 127497100
Test: Ran integration tests with integration app doing on-demand init.
Change-Id: I30930d6445c0e9c5f08eaaab554963aaac99b3c9
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/MainActivity.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RecursiveWorker.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/RetryActivity.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/TestApplication.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/imageprocessing/ImageProcessingActivity.java
M work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/sherlockholmes/AnalyzeSherlockHolmesActivity.java
M work/workmanager-gcm/src/main/java/androidx/work/impl/background/gcm/WorkManagerGcmService.java
M work/workmanager-testing/api/2.1.0-alpha01.txt
M work/workmanager-testing/api/current.txt
M work/workmanager-testing/src/androidTest/java/androidx/work/testing/TestSchedulerTest.java
M work/workmanager-testing/src/androidTest/java/androidx/work/testing/WorkManagerInitHelperTest.java
M work/workmanager-testing/src/main/java/androidx/work/testing/TestScheduler.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-testing/src/main/java/androidx/work/testing/package-info.java
M work/workmanager-testing/src/test/java/androidx/work/testing/RobolectricSmokeTest.java
M work/workmanager/api/2.1.0-alpha01.txt
M work/workmanager/api/current.txt
M work/workmanager/src/androidTest/java/androidx/work/impl/background/systemjob/SystemJobServiceTest.java
M work/workmanager/src/main/java/androidx/work/Configuration.java
M work/workmanager/src/main/java/androidx/work/WorkManager.java
M work/workmanager/src/main/java/androidx/work/impl/WorkManagerImpl.java
M work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/RescheduleReceiver.java
M work/workmanager/src/main/java/androidx/work/impl/background/systemalarm/SystemAlarmDispatcher.java
M work/workmanager/src/main/java/androidx/work/impl/background/systemjob/SystemJobService.java
M work/workmanager/src/main/java/androidx/work/impl/workers/ConstraintTrackingWorker.java
an...@gmail.com <an...@gmail.com> #4
Thanks for the fix! Is there any information about when this can be released to production?
an...@gmail.com <an...@gmail.com> #5
As this is a new API, this will first be released in 2.1.0-alpha01 and go through the normal alpha/beta/rc/stable release process. You can expect the first alpha in the next 2 weeks.
an...@gmail.com <an...@gmail.com> #6
Great! Thanks for the fast response.
an...@gmail.com <an...@gmail.com> #7
Wow super fast responce
da...@google.com <da...@google.com> #8
Thanks for the sample app. I haven't gotten to the bottom of the issue yet but I wanted to give you an update and it does seem indeed that Room is taking a very long time to parse and understand your queries via the ANTLR generated parser that Room uses. I'm not sure what is so special about your queries that is causing this, but I'll comment back with an update once I find out. Sadly for now I don't have a recommendation on a workaround.
da...@google.com <da...@google.com> #9
Alright, I've drill down the problem to being the various "OR <col_name> LIKE '%' : text '%'" in your queries. Specifically they cause the SQLiteParser in Room to go down a path with poor performance as described in https://github.com/antlr/antlr4/issues/1398 . A fix for this involves updating Room's ANTRL runtime library and generated parser code with the latest version. This update will likely be available in Room 2.1.0-alpha02.
an...@gmail.com <an...@gmail.com> #10
Thanks for the update. Is 2.1.0-alpha02 around the corner?
ap...@google.com <ap...@google.com> #11
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 8e46b9ca1f55b040a18dd86833880b5106d103b2
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Wed Oct 10 19:17:50 2018
Update Room's ANTLR Parser to 4.7.1
Updating to the latest ANTLR version fixes the performance issue
described inhttps://github.com/antlr/antlr4/issues/1398 which affects
Room's SQL Parser since it contains left-recursive rules. Specifically
SQLite.g4 has multiple recursions to describe an expression as defined
inhttps://www.sqlite.org/lang_expr.html , meaning if a user has certain
queries that causes the parser to use the adaptivePredict algorithm
then the build time increases significantly due to Room's query
parsing.
Also bumped Room's version to 2.1.0-alpha02
Bug: 117401230
Test: ./gradlew room:integration-tests:testapp:cC
Change-Id: I4d0799a11ccee816ab209cbf74e7dcf2b2ce1a18
M buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
M buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/UserDao.java
https://android-review.googlesource.com/786077
https://goto.google.com/android-sha1/8e46b9ca1f55b040a18dd86833880b5106d103b2
Branch: androidx-master-dev
commit 8e46b9ca1f55b040a18dd86833880b5106d103b2
Author: Daniel Santiago Rivera <danysantiago@google.com>
Date: Wed Oct 10 19:17:50 2018
Update Room's ANTLR Parser to 4.7.1
Updating to the latest ANTLR version fixes the performance issue
described in
Room's SQL Parser since it contains left-recursive rules. Specifically
SQLite.g4 has multiple recursions to describe an expression as defined
in
queries that causes the parser to use the adaptivePredict algorithm
then the build time increases significantly due to Room's query
parsing.
Also bumped Room's version to 2.1.0-alpha02
Bug: 117401230
Test: ./gradlew room:integration-tests:testapp:cC
Change-Id: I4d0799a11ccee816ab209cbf74e7dcf2b2ce1a18
M buildSrc/src/main/kotlin/androidx/build/LibraryVersions.kt
M buildSrc/src/main/kotlin/androidx/build/dependencies/Dependencies.kt
M room/integration-tests/testapp/src/androidTest/java/androidx/room/integration/testapp/dao/UserDao.java
da...@google.com <da...@google.com> #12
No concrete date on 2.1.0-alpha02, I want to get a few more bugs in before making the next alpha release. So maybe by the end of the month.
an...@gmail.com <an...@gmail.com> #13
--
- Ankit
- Ankit
Description
Version used: 1.1.1
Devices/Android versions reproduced on: Latest android emulator on Mac OS running Oreo image, Lenovo K6 Power
Also tried with Android studio 3.2 stable and Android 3.3 Preview version as well.
Building my project takes 15 min. If I comment out below line
annotationProcessor "android.arch.persistence.room:compiler:$ROOM_VERSION"
from my app's build.gradle, it takes only a minute to build the project. It's not a very big project (entity count wise) and I did not try reproducing the issue in a sample project. However, I can reproduce the
I have tried:
1. Cleaning. Rebuilding...
2. Invalidate caches/Restart.
3. Even tried migration to using all the androidx artifacts.
It seems like a bug in Room's annotationProcessor but I don't have a sample project to share.