mobile-messaging-sdk-android icon indicating copy to clipboard operation
mobile-messaging-sdk-android copied to clipboard

StrictMode DiskReadViolation during initialization

Open mars885 opened this issue 1 month ago • 4 comments

Hey all.

We are using the com.infobip:infobip-mobile-messaging-android-chat-sdk:12.6.2 version of the SDK inside our app. During the initialization of the SDK with StrictMode enabled like so:

StrictMode.setThreadPolicy(
    StrictMode.ThreadPolicy.Builder()
        .detectDiskReads()
        .detectDiskWrites()
        .detectNetwork()
        .penaltyLog()
        .penaltyDeathOnNetwork()
        .build()
)
StrictMode.setVmPolicy(
    StrictMode.VmPolicy.Builder()
        .detectAll()
        .penaltyLog()
        .build()
)

we get the following reports:

15:12:40.889  D  StrictMode policy violation; ~duration=151 ms: android.os.strictmode.DiskReadViolation
                 	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658)
                 	at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
                 	at libcore.io.ForwardingOs.access(ForwardingOs.java:128)
                 	at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7795)
                 	at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:313)
                 	at java.io.File.exists(File.java:813)
                 	at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:759)
                 	at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:750)
                 	at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:706)
                 	at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:931)
                 	at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:553)
                 	at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:217)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.getPrivateMMSharedPreferences(PreferenceHelper.java:56)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.findBoolean(PreferenceHelper.java:177)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.shouldUsePrivateSharedPrefs(PreferenceHelper.java:197)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.getDefaultMMSharedPreferences(PreferenceHelper.java:46)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.saveString(PreferenceHelper.java:106)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.saveString(PreferenceHelper.java:96)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.saveString(PreferenceHelper.java:91)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.saveString(PreferenceHelper.java:87)
                 	at org.infobip.mobile.messaging.NotificationSettings.setDefaultTitle(NotificationSettings.java:65)
                 	at org.infobip.mobile.messaging.NotificationSettings.access$000(NotificationSettings.java:37)
                 	at org.infobip.mobile.messaging.NotificationSettings$Builder.build(NotificationSettings.java:432)
                 	at org.infobip.mobile.messaging.MobileMessaging$Builder.loadNotificationSettings(MobileMessaging.java:534)
                 	at org.infobip.mobile.messaging.MobileMessaging$Builder.<init>(MobileMessaging.java:526)
                 	at *.support.chat.flow.main.infobip.MobileMessagingFactoryKt.build(MobileMessagingFactory.kt:8)
                 	at *.support.chat.flow.main.infobip.InfobipChat.init(InfobipChat.kt:21)
                 	at *.initializers.InfobipChatInitializer.init(InfobipChatInitializer.kt:10)
                 	at *.initializers.CompositeInitializer.init(CompositeInitializer.kt:8)
                 	at *.App.onCreate(App.kt:16)
                 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1277)
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6805)
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
                 	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:7918)
                 	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:936)
15:12:40.894  D  StrictMode policy violation; ~duration=150 ms: android.os.strictmode.DiskReadViolation
                 	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658)
                 	at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:275)
                 	at android.app.SharedPreferencesImpl.getBoolean(SharedPreferencesImpl.java:344)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.findBoolean(PreferenceHelper.java:177)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.shouldUsePrivateSharedPrefs(PreferenceHelper.java:197)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.getDefaultMMSharedPreferences(PreferenceHelper.java:46)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.saveString(PreferenceHelper.java:106)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.saveString(PreferenceHelper.java:96)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.saveString(PreferenceHelper.java:91)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.saveString(PreferenceHelper.java:87)
                 	at org.infobip.mobile.messaging.NotificationSettings.setDefaultTitle(NotificationSettings.java:65)
                 	at org.infobip.mobile.messaging.NotificationSettings.access$000(NotificationSettings.java:37)
                 	at org.infobip.mobile.messaging.NotificationSettings$Builder.build(NotificationSettings.java:432)
                 	at org.infobip.mobile.messaging.MobileMessaging$Builder.loadNotificationSettings(MobileMessaging.java:534)
                 	at org.infobip.mobile.messaging.MobileMessaging$Builder.<init>(MobileMessaging.java:526)
                 	at *.support.chat.flow.main.infobip.MobileMessagingFactoryKt.build(MobileMessagingFactory.kt:8)
                 	at *.support.chat.flow.main.infobip.InfobipChat.init(InfobipChat.kt:21)
                 	at *.initializers.InfobipChatInitializer.init(InfobipChatInitializer.kt:10)
                 	at *.initializers.CompositeInitializer.init(CompositeInitializer.kt:8)
                 	at *.App.onCreate(App.kt:16)
                 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1277)
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6805)
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
                 	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:7918)
                 	at java.lang.reflect.Method.invoke(Native Method)
                 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
15:12:40.901  D  StrictMode policy violation; ~duration=25 ms: android.os.strictmode.DiskReadViolation
                 	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658)
                 	at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
                 	at libcore.io.ForwardingOs.access(ForwardingOs.java:128)
                 	at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7795)
                 	at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:313)
                 	at java.io.File.exists(File.java:813)
                 	at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:759)
                 	at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:750)
                 	at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:706)
                 	at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:931)
                 	at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:553)
                 	at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:217)
                 	at android.preference.PreferenceManager.getDefaultSharedPreferences(PreferenceManager.java:545)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.getPublicSharedPreferences(PreferenceHelper.java:60)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.publicPrefsContains(PreferenceHelper.java:391)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.publicPrefsAreNotMigratedToPrivatePrefs(PreferenceHelper.java:191)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.shouldMigrateToPrivatePrefs(PreferenceHelper.java:187)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.migratePrefsIfNecessary(MobileMessagingCore.java:196)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.<init>(MobileMessagingCore.java:186)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.<init>(MobileMessagingCore.java:157)
                 	at org.infobip.mobile.messaging.MobileMessagingCore$Builder.build(MobileMessagingCore.java:2098)
                 	at org.infobip.mobile.messaging.MobileMessaging$Builder.build(MobileMessaging.java:927)
                 	at org.infobip.mobile.messaging.MobileMessaging$Builder.build(MobileMessaging.java:890)
                 	at *.support.chat.flow.main.infobip.MobileMessagingFactoryKt.build(MobileMessagingFactory.kt:8)
                 	at *.support.chat.flow.main.infobip.InfobipChat.init(InfobipChat.kt:21)
                 	at *.initializers.InfobipChatInitializer.init(InfobipChatInitializer.kt:10)
                 	at *.initializers.CompositeInitializer.init(CompositeInitializer.kt:8)
                 	at *.App.onCreate(App.kt:16)
                 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1277)
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6805)
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
                 	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:7918)
                 	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:936)
15:12:40.908  D  StrictMode policy violation; ~duration=25 ms: android.os.strictmode.DiskReadViolation
                 	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658)
                 	at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:275)
                 	at android.app.SharedPreferencesImpl.contains(SharedPreferencesImpl.java:353)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.publicPrefsContains(PreferenceHelper.java:391)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.publicPrefsAreNotMigratedToPrivatePrefs(PreferenceHelper.java:191)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.shouldMigrateToPrivatePrefs(PreferenceHelper.java:187)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.migratePrefsIfNecessary(MobileMessagingCore.java:196)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.<init>(MobileMessagingCore.java:186)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.<init>(MobileMessagingCore.java:157)
                 	at org.infobip.mobile.messaging.MobileMessagingCore$Builder.build(MobileMessagingCore.java:2098)
                 	at org.infobip.mobile.messaging.MobileMessaging$Builder.build(MobileMessaging.java:927)
                 	at org.infobip.mobile.messaging.MobileMessaging$Builder.build(MobileMessaging.java:890)
                 	at *.support.chat.flow.main.infobip.MobileMessagingFactoryKt.build(MobileMessagingFactory.kt:8)
                 	at *.support.chat.flow.main.infobip.InfobipChat.init(InfobipChat.kt:21)
                 	at *.initializers.InfobipChatInitializer.init(InfobipChatInitializer.kt:10)
                 	at *.initializers.CompositeInitializer.init(CompositeInitializer.kt:8)
                 	at *.App.onCreate(App.kt:16)
                 	at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1277)
                 	at android.app.ActivityThread.handleBindApplication(ActivityThread.java:6805)
                 	at android.app.ActivityThread.-$$Nest$mhandleBindApplication(Unknown Source:0)
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2132)
                 	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:7918)
                 	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:936)
15:12:41.591  D  StrictMode policy violation; ~duration=92 ms: android.os.strictmode.DiskReadViolation
                 	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658)
                 	at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
                 	at libcore.io.ForwardingOs.access(ForwardingOs.java:128)
                 	at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7795)
                 	at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:313)
                 	at java.io.File.exists(File.java:813)
                 	at android.app.ContextImpl.getDataDir(ContextImpl.java:2962)
                 	at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:704)
                 	at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:931)
                 	at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:553)
                 	at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:217)
                 	at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:217)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.getPrivateMMSharedPreferences(PreferenceHelper.java:56)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.getDefaultMMSharedPreferences(PreferenceHelper.java:49)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.findBoolean(PreferenceHelper.java:172)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.shouldSaveApplicationCode(MobileMessagingCore.java:1285)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.getApplicationCode(MobileMessagingCore.java:1135)
                 	at org.infobip.mobile.messaging.app.ActivityLifecycleMonitor.dispatchEventToModules(ActivityLifecycleMonitor.java:68)
                 	at org.infobip.mobile.messaging.app.ActivityLifecycleMonitor.setForeground(ActivityLifecycleMonitor.java:56)
                 	at org.infobip.mobile.messaging.app.ActivityLifecycleMonitor.onActivityResumed(ActivityLifecycleMonitor.java:95)
                 	at android.app.Application.dispatchActivityResumed(Application.java:431)
                 	at android.app.Activity.dispatchActivityResumed(Activity.java:1440)
                 	at android.app.Activity.onResume(Activity.java:2022)
                 	at androidx.fragment.app.FragmentActivity.onResume(FragmentActivity.java:309)
                 	at *.main.MainActivity.onResume(MainActivity.kt:89)
                 	at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1564)
                 	at android.app.Activity.performResume(Activity.java:8474)
                 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4763)
                 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4806)
                 	at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:57)
                 	at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
                 	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:179)
                 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2306)
                 	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:7918)
                 	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:936)
15:12:41.597  D  StrictMode policy violation; ~duration=92 ms: android.os.strictmode.DiskReadViolation
                 	at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1658)
                 	at libcore.io.BlockGuardOs.access(BlockGuardOs.java:74)
                 	at libcore.io.ForwardingOs.access(ForwardingOs.java:128)
                 	at android.app.ActivityThread$AndroidOs.access(ActivityThread.java:7795)
                 	at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:313)
                 	at java.io.File.exists(File.java:813)
                 	at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:759)
                 	at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:750)
                 	at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:706)
                 	at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:931)
                 	at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:553)
                 	at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:217)
                 	at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:217)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.getPrivateMMSharedPreferences(PreferenceHelper.java:56)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.getDefaultMMSharedPreferences(PreferenceHelper.java:49)
                 	at org.infobip.mobile.messaging.util.PreferenceHelper.findBoolean(PreferenceHelper.java:172)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.shouldSaveApplicationCode(MobileMessagingCore.java:1285)
                 	at org.infobip.mobile.messaging.MobileMessagingCore.getApplicationCode(MobileMessagingCore.java:1135)
                 	at org.infobip.mobile.messaging.app.ActivityLifecycleMonitor.dispatchEventToModules(ActivityLifecycleMonitor.java:68)
                 	at org.infobip.mobile.messaging.app.ActivityLifecycleMonitor.setForeground(ActivityLifecycleMonitor.java:56)
                 	at org.infobip.mobile.messaging.app.ActivityLifecycleMonitor.onActivityResumed(ActivityLifecycleMonitor.java:95)
                 	at android.app.Application.dispatchActivityResumed(Application.java:431)
                 	at android.app.Activity.dispatchActivityResumed(Activity.java:1440)
                 	at android.app.Activity.onResume(Activity.java:2022)
                 	at androidx.fragment.app.FragmentActivity.onResume(FragmentActivity.java:309)
                 	at *.main.MainActivity.onResume(MainActivity.kt:89)
                 	at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1564)
                 	at android.app.Activity.performResume(Activity.java:8474)
                 	at android.app.ActivityThread.performResumeActivity(ActivityThread.java:4763)
                 	at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:4806)
                 	at android.app.servertransaction.ResumeActivityItem.execute(ResumeActivityItem.java:57)
                 	at android.app.servertransaction.ActivityTransactionItem.execute(ActivityTransactionItem.java:45)
                 	at android.app.servertransaction.TransactionExecutor.executeLifecycleState(TransactionExecutor.java:179)
                 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:97)
                 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2306)
                 	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:7918)
                 	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:936)

We've followed the setup instructions from the README and basically have initialized the SDK from the Application class.

It takes roughly half a second to initialize the SDK on the UI thread, which is quite a lot.

Can something be done about this in terms of a fix? Should we initialize it on the backgrround thread and will it even work?

Looking forward to hearing from you.

mars885 avatar May 08 '24 12:05 mars885