Fixed
Status Update
Comments
ha...@gmail.com <ha...@gmail.com> #2
Indeed, since the disk IO can take more than 500ms, uses of the #apply method is now like scheduling a time bomb for ANR!
ha...@gmail.com <ha...@gmail.com> #3
ap...@google.com <ap...@google.com> #5
Project: platform/frameworks/support
Branch: androidx-master-dev
commit 288afbcaeaf69c9f340e941154ed8aad05f0442e
Author: Sumir Kataria <sumir@google.com>
Date: Wed Oct 17 11:24:33 2018
Lazily load Preferences.
Removes a potential disk IO on startup (which I haven't been able to
actually get to trigger a strict mode violation).
Changed integration test app to manually initialize WM.
Bug: 117796731
Test: Ran existing tests.
Change-Id: Ie8c77b4145aeb8a2e9a0b05e0cb20881cf4abc7e
M work/integration-tests/testapp/src/main/AndroidManifest.xml
A work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/TestApplication.java
M work/workmanager/src/main/java/androidx/work/impl/utils/Preferences.java
https://android-review.googlesource.com/792525
https://goto.google.com/android-sha1/288afbcaeaf69c9f340e941154ed8aad05f0442e
Branch: androidx-master-dev
commit 288afbcaeaf69c9f340e941154ed8aad05f0442e
Author: Sumir Kataria <sumir@google.com>
Date: Wed Oct 17 11:24:33 2018
Lazily load Preferences.
Removes a potential disk IO on startup (which I haven't been able to
actually get to trigger a strict mode violation).
Changed integration test app to manually initialize WM.
Bug: 117796731
Test: Ran existing tests.
Change-Id: Ie8c77b4145aeb8a2e9a0b05e0cb20881cf4abc7e
M work/integration-tests/testapp/src/main/AndroidManifest.xml
A work/integration-tests/testapp/src/main/java/androidx/work/integration/testapp/TestApplication.java
M work/workmanager/src/main/java/androidx/work/impl/utils/Preferences.java
su...@google.com <su...@google.com>
su...@twofortyfouram.com <su...@twofortyfouram.com> #6
Thank you for the quick response!
If it helps, this is the strict mode violation stacktrace I get:
StrictMode policy violation; ~duration=94 ms: android.os.strictmode.DiskReadViolation
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
at java.io.File.exists(File.java:815)
at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
at androidx.work.impl.utils.Preferences.<init>(Preferences.java:45)
at androidx.work.impl.WorkManagerImpl.<init>(WorkManagerImpl.java:194)
at androidx.work.impl.WorkManagerImpl.<init>(WorkManagerImpl.java:162)
at androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:138)
at androidx.work.WorkManager.initialize(WorkManager.java:158)
at com.twofortyfouram.app.work.WorkSetup.setupWorkHelper(WorkSetup.java:70)
at com.twofortyfouram.app.work.WorkSetup.setupWork(WorkSetup.java:59)
at com.twofortyfouram.app.ApplicationImpl.onCreate(ApplicationImpl.java:89)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
at android.app.ActivityThread.access$1100(ActivityThread.java:199)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
If it helps, this is the strict mode violation stacktrace I get:
StrictMode policy violation; ~duration=94 ms: android.os.strictmode.DiskReadViolation
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1504)
at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251)
at java.io.File.exists(File.java:815)
at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:605)
at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:596)
at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:552)
at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:747)
at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:400)
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:174)
at androidx.work.impl.utils.Preferences.<init>(Preferences.java:45)
at androidx.work.impl.WorkManagerImpl.<init>(WorkManagerImpl.java:194)
at androidx.work.impl.WorkManagerImpl.<init>(WorkManagerImpl.java:162)
at androidx.work.impl.WorkManagerImpl.initialize(WorkManagerImpl.java:138)
at androidx.work.WorkManager.initialize(WorkManager.java:158)
at com.twofortyfouram.app.work.WorkSetup.setupWorkHelper(WorkSetup.java:70)
at com.twofortyfouram.app.work.WorkSetup.setupWork(WorkSetup.java:59)
at com.twofortyfouram.app.ApplicationImpl.onCreate(ApplicationImpl.java:89)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1154)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5871)
at android.app.ActivityThread.access$1100(ActivityThread.java:199)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1650)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:193)
at android.app.ActivityThread.main(ActivityThread.java:6669)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
su...@twofortyfouram.com <su...@twofortyfouram.com> #7
Reproduced with alpha 10.
Description
Version used: Alpha 10
Devices/Android versions reproduced on: All
WorkManager performs disk IO on the main thread during application startup, as it touches disk for its SharedPreferences file. Ideally this would be done in a background thread to avoid adding delays to app launch.
I was able to identify this by removing the auto initialization ContentProvider via the manifest merger, enabling strict mode in Application.onCreate(), and then manually initializing WorkManager after strict mode was turned on.