Back to all

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:

  1. Is this fixed in the latest Median core / OneSignal plugin version? Will a fresh rebuild include the fix?
  2. Is there a setting to disable or defer the OneSignal info callback on page finish until OneSignal is initialized?
  3. 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)