Questions
Android ANR 3% caused by OneSignal v5 plugin blocking main thread on onPageFinished
Hi Median team,
Our Android app has a user-perceived ANR rate of 3.04% in Google Play Console (bad-behaviour threshold is 0.47%), which is hurting our Play Store visibility. Crash rate is fine (0.04%), but all ANR clusters are "Input dispatching timed out" with the same main-thread stack:
GoNativeWebviewClient.onPageFinished
→ Bridge.onPageFinish
→ OneSignalPlugin.onPageFinish
→ OneSignalManager.sendNativeOneSignalInfoCallback → sendOneSignalInfo → getUserInfo
→ OneSignal.getUser
→ OneSignalImp.waitForInit → runBlocking (main thread parked)
So on every page finish, the OneSignal v5 plugin calls OneSignal.getUser() on the main thread and blocks until OneSignal initialization completes. On slow networks/devices this blocks for more than 5 seconds and causes ANRs.
Questions:
- Is this fixed in the latest Median core / OneSignal plugin version? Will a fresh rebuild include the fix?
- Is there a setting to disable or defer the OneSignal info callback on page finish until OneSignal is initialized?
- Would enabling Legacy Mode (OneSignal Android SDK v4) avoid this, and what would we need to change on our side?
Release: 93 (4.0.2). Full main-thread stack trace below.
Thank you!
"main" tid=1 Timed Waiting
at jdk.internal.misc.Unsafe.park (Native method)
at java.util.concurrent.locks.LockSupport.parkNanos (LockSupport.java:276)
at kotlinx.coroutines.BlockingCoroutine.joinBlocking (BlockingCoroutine.java:98)
at kotlinx.coroutines.BuildersKt__BuildersKt.runBlocking (BuildersKt__Builders.kt:69)
at kotlinx.coroutines.BuildersKt.runBlocking (Builders.kt:1)
at com.onesignal.internal.OneSignalImp.waitForInit (OneSignalImp.kt:605)
at com.onesignal.internal.OneSignalImp.waitForInit$default (OneSignalImp.kt:604)
at com.onesignal.internal.OneSignalImp.waitAndReturn (OneSignalImp.kt:711)
at com.onesignal.internal.OneSignalImp.getServiceWithFeatureGate (OneSignalImp.kt:717)
at com.onesignal.internal.OneSignalImp.getUser (OneSignalImp.kt:142)
at com.onesignal.OneSignal.getUser (OneSignal.kt:46)
at co.median.android.plugins.oneSignal_v5.OneSignalManager.getUserInfo
at co.median.android.plugins.oneSignal_v5.OneSignalManager.getOneSignalInfo
at co.median.android.plugins.oneSignal_v5.OneSignalManager.sendOneSignalInfo
at co.median.android.plugins.oneSignal_v5.OneSignalManager.sendNativeOneSignalInfoCallback
at co.median.android.plugins.oneSignal_v5.OneSignalPlugin.onPageFinish (OneSignalPlugin.java:2)
at co.median.median_core.Bridge.onPageFinish (Bridge.java:2)
at co.median.android.UrlNavigation.onPageFinished (UrlNavigation.java:655)
at co.median.android.GoNativeWebviewClient.onPageFinished (GoNativeWebviewClient.java:65)
at android.os.Handler.dispatchMessage (Handler.java:107)
at android.os.Looper.loop (Looper.java:408)
at android.app.ActivityThread.main (ActivityThread.java:9119)