Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

StrictMode violations on initialization #580

Open
ShaishavGandhi opened this issue May 18, 2018 · 10 comments
Open

StrictMode violations on initialization #580

ShaishavGandhi opened this issue May 18, 2018 · 10 comments

Comments

@ShaishavGandhi
Copy link

Calling Branch.getAutoInstance(context) during app start causes multiple StrictMode violations (all DiskReadViolations). Here's the logs:

2018-05-18 09:53:44.589 6898-6898/com.glassdoor.app D/StrictMode: StrictMode policy violation; ~duration=164 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=1114175 violation=2 at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1440) at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251) at java.io.File.exists(File.java:807) at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:572) at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:563) at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:519) at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:714) at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:368) at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167) at io.branch.referral.PrefHelper.<init>(PrefHelper.java:154) at io.branch.referral.PrefHelper.getInstance(PrefHelper.java:172) at io.branch.referral.Branch.<init>(Branch.java:424) at io.branch.referral.Branch.initInstance(Branch.java:744) at io.branch.referral.Branch.getBranchInstance(Branch.java:565) at io.branch.referral.Branch.getAutoInstance(Branch.java:645) at com.glassdoor.gdandroid2.app.GDApplication.initBranch(GDApplication.java:540) at com.glassdoor.gdandroid2.app.GDApplication.onCreate(GDApplication.java:312) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5740) at android.app.ActivityThread.-wrap1(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

2018-05-18 09:53:44.590 6898-6898/com.glassdoor.app D/StrictMode: StrictMode policy violation; ~duration=136 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=1114175 violation=2 at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1440) at java.io.UnixFileSystem.checkAccess(UnixFileSystem.java:251) at java.io.File.exists(File.java:807) at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:572) at android.app.ContextImpl.ensurePrivateDirExists(ContextImpl.java:563) at android.app.ContextImpl.getPreferencesDir(ContextImpl.java:519) at android.app.ContextImpl.getSharedPreferencesPath(ContextImpl.java:714) at android.app.ContextImpl.getSharedPreferences(ContextImpl.java:368) at android.content.ContextWrapper.getSharedPreferences(ContextWrapper.java:167) at io.branch.referral.ServerRequestQueue.<init>(ServerRequestQueue.java:61) at io.branch.referral.ServerRequestQueue.getInstance(ServerRequestQueue.java:46) at io.branch.referral.Branch.<init>(Branch.java:427) at io.branch.referral.Branch.initInstance(Branch.java:744) at io.branch.referral.Branch.getBranchInstance(Branch.java:565) at io.branch.referral.Branch.getAutoInstance(Branch.java:645) at com.glassdoor.gdandroid2.app.GDApplication.initBranch(GDApplication.java:540) at com.glassdoor.gdandroid2.app.GDApplication.onCreate(GDApplication.java:312) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5740) at android.app.ActivityThread.-wrap1(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

2018-05-18 09:44:50.363 6173-6173/? D/StrictMode: StrictMode policy violation; ~duration=129 ms: android.os.StrictMode$StrictModeDiskReadViolation: policy=1114175 violation=2 at android.os.StrictMode$AndroidBlockGuardPolicy.onReadFromDisk(StrictMode.java:1440) at android.app.SharedPreferencesImpl.awaitLoadedLocked(SharedPreferencesImpl.java:234) at android.app.SharedPreferencesImpl.edit(SharedPreferencesImpl.java:315) at io.branch.referral.ServerRequestQueue.<init>(ServerRequestQueue.java:62) at io.branch.referral.ServerRequestQueue.getInstance(ServerRequestQueue.java:46) at io.branch.referral.Branch.<init>(Branch.java:427) at io.branch.referral.Branch.initInstance(Branch.java:744) at io.branch.referral.Branch.getBranchInstance(Branch.java:565) at io.branch.referral.Branch.getAutoInstance(Branch.java:645) at com.glassdoor.gdandroid2.app.GDApplication.initBranch(GDApplication.java:540) at com.glassdoor.gdandroid2.app.GDApplication.onCreate(GDApplication.java:312) at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1119) at android.app.ActivityThread.handleBindApplication(ActivityThread.java:5740) at android.app.ActivityThread.-wrap1(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1656) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)

@sojanpr
Copy link
Contributor

sojanpr commented May 18, 2018

@shaishavgandhi05 Thanks for reaching out.
Android strict mode warns all kind of suspicious disk reads or network calls just for dev to assure or fix. In the above case the Strict mode warning is regarding accessing application preference from the main thread and it is completely legal and thread safe in Android.
As it is mentioned In Google's doc for strict mode.

Don't feel compelled to fix everything that StrictMode finds. In particular, many cases of disk access are often necessary during the normal activity lifecycle. Use StrictMode to find things you did by accident. Network requests on the UI thread are almost always a problem, though.

From our side we made sure we read the disk only for preference operations. Do you think this help to mitigate the concern?

@sojanpr sojanpr closed this as completed May 18, 2018
@ShaishavGandhi
Copy link
Author

While I agree, you can see that those are three StrictMode violations on a single Branch.getAutoInstance(). If you see the log, each StrictMode violation is 100ms+. Since this call is made at app start, that theoretically adds 300ms overhead to Application initialization.

With new Play Store rankings depending a lot on performance metrics (including app start times), you can see why this might be a concern.

@sojanpr
Copy link
Contributor

sojanpr commented May 22, 2018

@shaishavgandhi05 We tested and confirmed that the disk read is not taking this much time even though it shows in the strict mode violation. Definitely we will add optimization in the next version to reduce the disk read on start up

@ShaishavGandhi
Copy link
Author

Sounds good! Thanks!

@Yrlec
Copy link

Yrlec commented Dec 1, 2018

Any updates on this? We're facing the same issue and on old devices it often adds several 100ms to to the startup time. Can't you run the I/O in a background thread and then use callbacks to the UI thread? Anything we can assist with to implement that?

@GaurawNegi
Copy link

Any updates on this? we are also facing the same issue

@dbacinski
Copy link

implementation 'io.branch.sdk.android:library:4.1.1'

Same problem here. This issue should be reopened.

@apeterson-branch
Copy link
Contributor

Jira Ticket Filed: SDK-580

@csalmi-branch csalmi-branch reopened this Oct 24, 2019
@Turnsole
Copy link

Turnsole commented Nov 16, 2022

This is still a problem. In our case we're seeing a ~200ms delay due to disk reads in BranchActivityLifeCycleObserver.onActivityStarted.

@jf-branch
Copy link
Contributor

Hi @Turnsole, we will be investigating further this sprint. We will keep this thread up to date with our findings and conclusions.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

9 participants