analytics-android icon indicating copy to clipboard operation
analytics-android copied to clipboard

StrictMode DiskWriteViolation

Open hitesh-banknovo opened this issue 5 years ago • 3 comments

Strict mode disk write violation issue faced while initialising segment (Even in thread).

Basic root cause : Handler is used for "performInitializeIntegrations" creating queue file so it is in main thread and it is against the strict mode policy.

Stack trace is :

Caused by: android.os.strictmode.DiskWriteViolation at android.os.StrictMode$AndroidBlockGuardPolicy.onWriteToDisk(StrictMode.java:1475) at java.io.UnixFileSystem.createDirectory(UnixFileSystem.java:309) at java.io.File.mkdir(File.java:1325) at android.app.ContextImpl.getDir(ContextImpl.java:2289) at android.content.ContextWrapper.getDir(ContextWrapper.java:294) at com.segment.analytics.SegmentIntegration.create(SegmentIntegration.java:182) at com.segment.analytics.SegmentIntegration$1.create(SegmentIntegration.java:74) at com.segment.analytics.Analytics.performInitializeIntegrations(Analytics.java:1405) at com.segment.analytics.Analytics$2$1.run(Analytics.java:277)

hitesh-banknovo avatar Aug 23 '19 09:08 hitesh-banknovo

Any update on this issue?

amankgo avatar Nov 27 '20 07:11 amankgo

Adding more details on this exactly from where addobserver on main thread exception occurs

lifecycle.addObserver(activityLifecycleCallback); in Analytics.java from com.segment.analytics package

        activityLifecycleCallback =
                new AnalyticsActivityLifecycleCallbacks.Builder()
                        .analytics(this)
                        .analyticsExecutor(analyticsExecutor)
                        .shouldTrackApplicationLifecycleEvents(
                                shouldTrackApplicationLifecycleEvents)
                        .trackDeepLinks(trackDeepLinks)
                        .shouldRecordScreenViews(shouldRecordScreenViews)
                        .packageInfo(getPackageInfo(application))
                        .useNewLifecycleMethods(useNewLifecycleMethods)
                        .build();

        application.registerActivityLifecycleCallbacks(activityLifecycleCallback);
        if (useNewLifecycleMethods) {
            lifecycle.addObserver(activityLifecycleCallback);
        }

neerav-banknovo avatar May 19 '21 15:05 neerav-banknovo

I ended up switching to https://github.com/segmentio/analytics-kotlin and no longer have this strict mode issue.

nplasterer avatar Nov 29 '21 19:11 nplasterer