-
Notifications
You must be signed in to change notification settings - Fork 33
Open
Description
Describe the bug
When strict mode is enabled, there are couple of storage access on main thread violations.
To Reproduce
Add the following code snippet to application file in kotlin-android-app
sample app
// Thread policy - detects network calls, disk reads, custom slow calls on main thread
StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
.detectNetwork() // Detect network calls on main thread
.detectDiskReads() // Detect disk reads on main thread
.detectDiskWrites() // Detect disk writes on main thread
.detectCustomSlowCalls() // Detect custom slow calls marked with StrictMode.noteSlowCall()
.penaltyLog() // Log violations to LogCat
.penaltyDialog() // Show dialog for violations (useful for debugging)
.build());
You will see couple of violations, all due to accessing storage in main thread at start up.
StrictMode policy violation; ~duration=30 ms: android.os.strictmode.DiskReadViolation
at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1683)
at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
at libcore.io.ForwardingOs.access(ForwardingOs.java:128)
at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:8582)
at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:332)
at java.io.File.exists(File.java:829)
at com.segment.analytics.kotlin.core.utilities.FileUtils.createDirectory(FileUtils.kt:12)
at com.segment.analytics.kotlin.core.utilities.FileEventStream.<init>(EventStream.kt:162)
at com.segment.analytics.next.EncryptedEventStream.<init>(EncryptedEventStream.kt:25)
at com.segment.analytics.next.EncryptedStorageProvider.createStorage(EncryptedEventStream.kt:194)
at com.segment.analytics.kotlin.core.Analytics$storage$2.invoke(Analytics.kt:47)
at com.segment.analytics.kotlin.core.Analytics$storage$2.invoke(Analytics.kt:46)
at kotlin.SynchronizedLazyImpl.getValue(LazyJVM.kt:74)
at com.segment.analytics.kotlin.core.Analytics.getStorage(Analytics.kt:46)
at com.segment.analytics.kotlin.core.Analytics.<init>(Analytics.kt:50)
at com.segment.analytics.kotlin.core.Analytics.<init>(Analytics.kt:87)
at com.segment.analytics.kotlin.android.AndroidAnalyticsKt.Analytics(AndroidAnalytics.kt:67)
at com.segment.analytics.next.MainApplication.onCreate(MainApplication.kt:31)
at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1386)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:7504)
at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2416)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loopOnce(Looper.java:232)
at android.os.Looper.loop(Looper.java:317)
at android.app.ActivityThread.main(ActivityThread.java:8705)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
Expected behavior
There should not be any DiskReadViolation on main thread.
Metadata
Metadata
Assignees
Labels
No labels