SimpleCache means that strictmode is not possible
Open
@marcbaechinger is already working on this.
Since May 31, 2022.
bug
- Dominant language
- Java
- Stars
- 3k
- Forks
- 955
- Avg merge
- 12d 14h
- Merged PRs (30d)
- 2
Description
A commit with test example
https://github.com/yschimke/media/commit/c9cbe959173b23c92075c7fdc4238fd01c90e019
It seems that SimpleCache will always require a file from the application context, like context.filesDir. This triggers a strictmode violation.
This happens in the demo app in an activity, and would in the service for demo-session if it used a cache.
Apart from this it seems like most of ExoPlayer is setup to correctly defer any network or I/O work. Could the SimpleCache be changed to support a deferred File, e.g. a Provider param, before it's actually used?
14:22:34.164 E FATAL EXCEPTION: main
Process: androidx.media3.demo.main, PID: 10522
java.lang.RuntimeException: Unable to start activity ComponentInfo{androidx.media3.demo.main/androidx.media3.demo.main.SampleChooserActivity}: java.lang.RuntimeException: StrictMode ThreadPolicy violation
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3635)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: java.lang.RuntimeException: StrictMode ThreadPolicy violation
at android.os.StrictMode$AndroidBlockGuardPolicy.onThreadPolicyViolation(StrictMode.java:1876)
at android.os.StrictMode$AndroidBlockGuardPolicy.handleViolationWithTimingAttempt(StrictMode.java:1733)
at android.os.StrictMode$AndroidBlockGuardPolicy.startHandlingViolationException(StrictMode.java:1704)
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1659)
at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
at libcore.io.ForwardingOs.access(ForwardingOs.java:131)
at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7716)
at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:281)
at java.io.File.exists(File.java:813)
at android.app.ContextImpl.ensureExternalDirsExistOrFilter(ContextImpl.java:3266)
at android.app.ContextImpl.getExternalFilesDirs(ContextImpl.java:825)
at android.app.ContextImpl.getExternalFilesDir(ContextImpl.java:814)
at android.content.ContextWrapper.getExternalFilesDir(ContextWrapper.java:281)
at android.content.ContextWrapper.getExternalFilesDir(ContextWrapper.java:281)
at androidx.media3.demo.main.DemoUtil.getDownloadDirectory(DemoUtil.java:185)
at androidx.media3.demo.main.DemoUtil.getDownloadCache(DemoUtil.java:146)
at androidx.media3.demo.main.DemoUtil.ensureDownloadManagerInitialized(DemoUtil.java:161)
at androidx.media3.demo.main.DemoUtil.getDownloadTracker(DemoUtil.java:138)
at androidx.media3.demo.main.SampleChooserActivity.onCreate(SampleChooserActivity.java:125)
at android.app.Activity.performCreate(Activity.java:8051)
at android.app.Activity.performCreate(Activity.java:8031)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Caused by: android.os.strictmode.DiskReadViolation
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1659)
at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
at libcore.io.ForwardingOs.access(ForwardingOs.java:131)
at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7716)
at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:281)
at java.io.File.exists(File.java:813)
at android.app.ContextImpl.ensureExternalDirsExistOrFilter(ContextImpl.java:3266)
at android.app.ContextImpl.getExternalFilesDirs(ContextImpl.java:825)
at android.app.ContextImpl.getExternalFilesDir(ContextImpl.java:814)
at android.content.ContextWrapper.getExternalFilesDir(ContextWrapper.java:281)
at android.content.ContextWrapper.getExternalFilesDir(ContextWrapper.java:281)
at androidx.media3.demo.main.DemoUtil.getDownloadDirectory(DemoUtil.java:185)
at androidx.media3.demo.main.DemoUtil.getDownloadCache(DemoUtil.java:146)
at androidx.media3.demo.main.DemoUtil.ensureDownloadManagerInitialized(DemoUtil.java:161)
at androidx.media3.demo.main.DemoUtil.getDownloadTracker(DemoUtil.java:138)
at androidx.media3.demo.main.SampleChooserActivity.onCreate(SampleChooserActivity.java:125)
at android.app.Activity.performCreate(Activity.java:8051)
at android.app.Activity.performCreate(Activity.java:8031)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1329)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3608)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3792)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:103)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2210)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loopOnce(Looper.java:201)
at android.os.Looper.loop(Looper.java:288)
at android.app.ActivityThread.main(ActivityThread.java:7839)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.