androidx / androidx/media

SimpleCache means that strictmode is not possible

Open
#80 8 comments 0 reactions 1 assignee View on GitHub

@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

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.