Skip to content

Violations while using strict mode #276

@Shahroz16

Description

@Shahroz16

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
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions