analytics-android
analytics-android copied to clipboard
StrictMode DiskWriteViolation
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)
Any update on this issue?
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);
}
I ended up switching to https://github.com/segmentio/analytics-kotlin and no longer have this strict mode issue.